将一行转换为火花scala中的列表
答
您可以在一行中使用toSeq
方法,然后从Seq[Any]
的类型转换为Seq[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
与模式匹配的String转换到双:
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)
答
如果你有一个dataframe
与doubles
要转换成的doubles
List
,那么就转换dataframe
为rdd
,这将给你RDD[Row]
你可以隐蔽的这List
为
dataframe.rdd.map(_.toSeq.toList)
您将得到list of doubles
对不起,它看起来像我的数据框有所有的数字,但字符串格式...有没有办法做到这一点?谢谢! –
您可以使用'map'和模式匹配进行一些类型转换,请参阅更新。 – Psidom