scala - 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
Inworker2
->/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
在集群上安装!?
解决方案
推荐阅读
- android - Kotlin:null 不能转换为非 null 类型 com.google.android.youtube.player.YouTubePlayerFragment
- reactjs - 我将如何在 React 的 Todolist 中完成列表项目?
- reactjs - 在主 html 文件中包含 Next.js 应用程序包
- python - 范围和自定义打开(学习 Python 第 539 页)
- arrays - Powershell如何在if语句中遍历000-255字符串
- python - IndexError:python拆分函数的列表索引超出范围错误
- javascript - React .env.environment 文件的变量不起作用
- php - Laravel 可搜索属于
- python - 如何将className添加到body标签
- python - 如何在不使用谷歌表格的情况下使用 python 更新谷歌驱动器中的现有 csv