将json rdd写入AWS S3而不创建_temporary文件夹

时间:2016-11-24 12:45:55

标签: json scala apache-spark amazon-s3

我正试图在Zeppelin上使用scala和spark将大型json rdd文件写入AWS S3。当我尝试使用saveAsTextFile()方法编写它时,它会创建_temporary / 0 / ..文件夹并将每个rdd部分写入此文件夹。这个过程非常快,但在此之后,我认为它将每个部分复制到目标文件夹中,这个复制过程非常慢;

rdd.saveAsTextFile(outputPath + filename)

我已经尝试将rdd转换为spark数据帧,并使用以下代码编写它,它仍然是相同的;

sc.hadoopConfiguration.set("spark.hadoop.mapred.output.committer.class", "com.appsflyer.spark.DirectOutputCommitter")
val DF = rdd.toDF()
DF.repartition(50).write.json(outputPath + filename)

我找到了一种将其写为镶木地板文件的方法;

sc.hadoopConfiguration.set("spark.sql.parquet.output.committer.class", "org.apache.spark.sql.parquet.DirectParquetOutputCommitter")
val dataDF = rdd.toDF()
dataDF.repartition(10).write.parquet(outputPath+filename)

有效。它很快,因为它不会创建临时文件夹。它将它直接写入目标。但我需要将此rdd写为json txt文件。 有没有办法在不在AWS S3上创建临时文件夹的情况下编写json文件?或任何json文件的提交者,如" org.apache.spark.sql.parquet.DirectParquetOutputCommitter"?

0 个答案:

没有答案