如何在Spark中保留临时输出文件

时间:2016-07-21 13:15:18

标签: scala apache-spark apache-spark-sql

我正在写一个地图,只有sparkSQL的工作看起来像

val lines = sc.textFile(inputPath)    
val df = lines.map { line => ... }.toDF("col0", "col1")
df.write.parquet(output)

由于工作需要相当长的时间来计算,我希望保存并保留成功终止的任务的结果,即使整个工作失败或被杀死。

我注意到,在计算过程中,在输出目录中创建了一些临时文件。 我检查过他们并注意到,因为我的工作只有一个映射器,所以保存的是成功任务的输出。 问题是作业失败了,我无法分析它可以计算的内容,因为临时文件已被删除。

有没有人知道如何处理这种情况?

干杯!

1 个答案:

答案 0 :(得分:0)

将输出提交者更改为DirectParquetOutputCommitter

sc.hadoopConfiguration.set("spark.sql.parquet.output.committer.class", "org.apache.spark.sql.parquet.DirectParquetOutputCommitter"

请注意,如果您已启用推测执行,则必须将其关闭以使用直接输出提交器。