我正试图在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"?