如何在scala中将数据帧转换为RDD,而不是丢失数据帧的架构

时间:2016-10-26 17:05:56

标签: scala dataframe rdd

我的数据框如下:

storeId| dateId|projectId
 9     |2457583|     1047
 9     |2457576|     1048

当我rd = resultDataframe.rdd时,rd只有数据而不是标题信息。我用rd.first证实了这一点,我没有得到标题信息。当我尝试

rd.map(f => f._1+"\t"+f._2+"\t"+f._3).saveAsTextFile("s3://pathinS3/testtab4")

我只看到

9     2457583     1047
9     2457576     1048

我希望能够将resultDataframe转换为制表符分隔的csv并将其存储在s3中。

s3中的预期csv输出:

storeId     dateId      projectId
 9          2457583     1047
 9          2457576     1048

感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

你可以这样做

val rdd = df.rdd
val data = rdd.map(_.mkString("\t"))
val header = sc.parallelize(Seq(df.columns.mkString("\t")))
val rddWitHeader = header.union(data)

答案 1 :(得分:1)

我有一个解决方法:

val columns= resultDataFrame.columns
val rddOfheader=sc.parallelize(columns)
val rddtoBesaved=resultDataFrame.rdd.map(f => (f.getAs[String](0),f.getAs[String](1),f.getAs[String](2))
val unionRDD=rddOfheader.unionAll(rddtoBeSaved)
unionRDD.coalesce(1).saveAsTextFile("foo.txt")

P.S:代码未经过测试,但这应该有效,并且很乐意看到一个简单的答案,但这应该有效。