收集数据框上的火花

时间:2019-08-01 17:10:12

标签: scala dataframe apache-spark

我这样写:

df.select(col("colname")).distinct().collect.map(_.toString()).toList

结果是

List("[2019-06-24]", "[2019-06-22]", "[2019-06-23]")

我想得到的地方:

List("2019-06-24", "2019-06-22", "2019-06-23")

请如何更改此内容

2 个答案:

答案 0 :(得分:1)

您需要将.map(_.toString())更改为.map(_.getAs[String]("colname"))

通过.map(_.toString()),您正在调用org.apache.spark.sql.Row.toString,这就是为什么输出类似于{ {1}}。

正确的方法是:
List("[2019-06-24]", "[2019-06-22]", "[2019-06-23]")

输出将是:

val list = df.select("colname").distinct().collect().map(_.getAs[String]("colname")).toList

答案 1 :(得分:0)

样本数据:

val df=sc.parallelize(Seq(("2019-06-24"),( "2019-06-22"),("2019-06-23"))).toDF("cn")

现在选择列,然后应用 map 以获取第一个索引值,然后添加引号,然后转换为字符串。

df.select("cn").collect().map(x => x(0)).map(x => s""""$x"""".toString)
//res36: Array[String] = Array("2019-06-24", "2019-06-22", "2019-06-23")

(或)

df.select("cn").collect().map(x => x(0)).map(x => s""""$x"""".toString).toList
//res37: List[String] = List("2019-06-24", "2019-06-22", "2019-06-23")