【发布时间】:2019-02-04 22:29:29
【问题描述】:
我在一个有 2 个工作节点的集群中运行 spark job!我正在使用下面的代码(spark java)将计算的数据帧作为 csv 保存到工作节点。
dataframe.write().option("header","false").mode(SaveMode.Overwrite).csv(outputDirPath);
我试图了解 spark 如何在每个工作节点上写入多个部分文件。
Run1) worker1 有 part files 和 SUCCESS ; worker2 有 _temporarty/task*/part* 每个任务都有部分文件运行。
Run2) worker1 有部分文件和_temporary 目录; worker2 有 multiple part files
谁能帮我理解为什么会出现这种行为?
1)我是否应该将outputDir/_temporary 中的记录与part files in outputDir 一起视为输出文件的一部分?
2) 作业运行后是否应该删除_temporary 目录并将part 文件移动到outputDir?
3)为什么不能直接在输出目录下创建零件文件?
coalesce(1) 和 repartition(1) 不能作为选项,因为 outputDir 文件本身将在 500GB 附近
Spark 2.0.2. 2.1.3 和 Java 8, no HDFS
【问题讨论】:
-
您是否保存到分布式文件系统?还是直接在每个工作节点上?你可以看看这个问题,可能是相关的:stackoverflow.com/questions/51603404/…
-
这只是Q 51603404; Spark 需要一个跨所有工作人员的通用文件系统,否则事情就会被破坏。以某种方式设置共享存储,即使只是 NFS
标签: java csv apache-spark dataframe apache-spark-sql