[英]Spark: format of an rdd to convert to dataframe
假设我有以下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)]
我想通过使用采用数据帧的.write.format("com.databricks.spark.csv")
将输出写入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)]
知道怎么做吗?
更新
要使用Tuples,您必须知道要放入其中的元素数量,并自己定义用例。 因此,要使用可变数量的元素,您可能需要使用一些集合。 对于您的用例,可以使用以下方法:
rdd.map { case((a,b,c,d)) => a +: (b +: c) :+ d}.map(_.mkString(","))
这将导致对应于csv文件每一行的RDD[String]
。 您正在将其他元素添加并附加到Array
“ c”以产生单个Array
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.