首页 > 解决方案 > Spark Dataframe 将部分文件写入 _temporary 中,而不是直接在输出目录中创建 partFiles

问题描述

以独立集群模式运行 Spark 2.0.2;2 个工作节点和 1 个主节点

简单测试;读取管道分隔文件并将数据写入 csv。以下命令在设置了 master-url 的 spark-shell 中执行

val df = spark.sqlContext.read.option("delimiter","|").option("quote","\u0000").csv("/home/input-files/")
val emailDf=df.filter("_c3='EML'")
emailDf.repartition(100).write.csv("/opt/outputFile/")

在设置了主 url 的 spark-shell 中执行上述 cmds 后。

In worker1-> 每个零件文件都是在/opt/outputFile/_temporary/task-xxxxx-xxx/part-xxx-xxx
In worker2-> /opt/outputFile/part-xxx=> 零件文件是直接在写入时指定的 outputDirectory 下生成的。

使用 coalesce(100) 或不指定 repartition/coalesce 也会发生同样的事情!!!

问题

1)为什么worker1 /opt/outputFile/输出目录没有part-xxxx像 in 一样的文件worker2?为什么_temporary创建目录并且part-xxx-xx文件驻留在task-xxx目录中?

2)是不是因为我没有HDFS在集群上安装!?

标签: scalacsvapache-sparkapache-spark-sql

解决方案


推荐阅读