将一行转换为火花scala中的列表

问题描述:

这样做有可能吗?我的数据框中的所有数据(大约1000列)都是双倍数据,我是否可以将一行数据转换为双精度列表?将一行转换为火花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) 
+0

对不起,它看起来像我的数据框有所有的数字,但字符串格式...有没有办法做到这一点?谢谢! –

+0

您可以使用'map'和模式匹配进行一些类型转换,请参阅更新。 – Psidom

如果你有一个dataframedoubles要转换成的doublesList,那么就转换dataframerdd,这将给你RDD[Row]你可以隐蔽的这List

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

您将得到list of doubles