Spark:要转换为dataframe的rdd格式

时间:2016-09-28 12:05:34

标签: scala apache-spark

假设我有以下rdd:

val rdd = sc.parallelize(Seq(('a'.toString,1.1,Array(1.1,2.2),0),
                             ('b'.toString,1.5,Array(1.4,4.2),3),
                             ('d'.toString,2.1,Array(3.3,7.4),4)))

>>>rdd: org.apache.spark.rdd.RDD[(String,Double,Array[Double],Int)]

我希望使用带有数据帧的csv将输出写为.write.format("com.databricks.spark.csv")格式。

首先,我需要将当前架构转换为 - > rdd[(String, String, String, String, String)]并将其转换为df。我尝试了以下方法:

rdd.map { case((a,b,c,d)) => (a,b,c.mkString(","),d)}

但是输出:

rdd[(string,double,string,int)]

知道该怎么做吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

要使用Tuples,您必须知道要将多少元素放入其中并自行定义用例。因此,要使用可变数量的元素,您可能需要使用某些集合。 对于您的用例,这样的事情可以起作用:

rdd.map { case((a,b,c,d)) => a +: (b +: c) :+ d}.map(_.mkString(","))

这将导致对应于csv文件的每一行的RDD[String]。 您已将其他元素添加到Array&#34; c&#34;导致单Array