使用Headers写入空RDD以输出文件Spark

时间:2017-09-20 12:56:25

标签: apache-spark apache-spark-sql

我有条件需要生成只有标题的输出文件。我使用了以下依赖项

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.6.0</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.10</artifactId>
    <version>1.6.0</version>
</dependency>

Spark Java代码

 JavaSparkContext context = SparkBean.getInstance().getJavaSparkContext();
 JavaRDD<Row> emptyRdd = context.emptyRDD();                                
 SQLContext sqlContext = SparkBean.getInstance().getSparkSQLContext();  
 DataFrame tpDf = sqlContext.createDataFrame(emptyRdd,Common.createSchema(ConfigItems.getCitywiseSchema()));
 tpDf.coalesce(1).toJavaRDD().saveAsTextFile("citywise.csv");

使用citywise.csv文件夹生成的输出,在里面我只能看到成功文件没有零件文件。

预期输出

  

citywise.csv / part-00000

cat citywise.csv/part-00000 
header1,header2,header3

更新

我也使用下面的代码

tpDf.coalesce(1).write().format("com.databricks.spark.csv").option("header","true").save(FileName);

没有输出部分文件

有人知道如何实现这个吗?

1 个答案:

答案 0 :(得分:1)

在回答问题之前我应该​​提到您要避免使用RDD(遗留API),而应该使用DataSet/DataFrame(Structred API)。有关三个api之间差异的更多信息以及为什么结构化api比RDD好得多,请重新考虑this databricks article

现在回答你的问题:

我来自scala,但我确实认为,由于您使用的是结构化API,因此在java和python中这样做非常相似:

tpDF.write.option("header", true).save("test") 

希望这会对你有所帮助。最诚挚的问候