假设我有以下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)]
知道该怎么做吗?
答案 0 :(得分:0)
<强>更新强>
要使用Tuples,您必须知道要将多少元素放入其中并自行定义用例。因此,要使用可变数量的元素,您可能需要使用某些集合。 对于您的用例,这样的事情可以起作用:
rdd.map { case((a,b,c,d)) => a +: (b +: c) :+ d}.map(_.mkString(","))
这将导致对应于csv文件的每一行的RDD[String]
。
您已将其他元素添加到Array
&#34; c&#34;导致单Array
。