我正在写一个地图,只有sparkSQL的工作看起来像
val lines = sc.textFile(inputPath)
val df = lines.map { line => ... }.toDF("col0", "col1")
df.write.parquet(output)
由于工作需要相当长的时间来计算,我希望保存并保留成功终止的任务的结果,即使整个工作失败或被杀死。
我注意到,在计算过程中,在输出目录中创建了一些临时文件。 我检查过他们并注意到,因为我的工作只有一个映射器,所以保存的是成功任务的输出。 问题是作业失败了,我无法分析它可以计算的内容,因为临时文件已被删除。
有没有人知道如何处理这种情况?
干杯!
答案 0 :(得分:0)
将输出提交者更改为DirectParquetOutputCommitter
。
sc.hadoopConfiguration.set("spark.sql.parquet.output.committer.class", "org.apache.spark.sql.parquet.DirectParquetOutputCommitter"
请注意,如果您已启用推测执行,则必须将其关闭以使用直接输出提交器。