将行转换为spark scala中的列表

时间:2017-06-13 21:33:31

标签: scala apache-spark dataframe

这可能吗?我的数据框中的所有数据(~1000 cols)都是双打,而我是否可以将一行数据转换为双打列表?

2 个答案:

答案 0 :(得分:2)

您可以在行上使用toSeq方法,然后将类型从Seq[Any]转换为Seq[Double](如果您确定所有列的数据类型都是Double):

val df = Seq((1.0,2.0),(2.1,2.2)).toDF("A", "B")
// df: org.apache.spark.sql.DataFrame = [A: double, B: double]

df.show
+---+---+
|  A|  B|
+---+---+
|1.0|2.0|
|2.1|2.2|
+---+---+

df.first.toSeq.asInstanceOf[Seq[Double]]
// res1: Seq[Double] = WrappedArray(1.0, 2.0)

如果您有字符串类型列,请使用toSeq,然后使用map模式匹配将字符串转换为 Double :< / p>

val df = Seq((1.0,"2.0"),(2.1,"2.2")).toDF("A", "B")
// df: org.apache.spark.sql.DataFrame = [A: double, B: string]

df.first.toSeq.map{ 
    case x: String => x.toDouble
    case x: Double => x 
}
// res3: Seq[Double] = ArrayBuffer(1.0, 2.0)

答案 1 :(得分:1)

如果您要将dataframedoubles转换为List doubles,请将dataframe转换为rdd这将给你RDD[Row]你可以将其转换为List

dataframe.rdd.map(_.toSeq.toList)

您将获得list of doubles