Ale*_*dro 4 hadoop partitioning apache-spark pyspark
是否可以_temporary在写入之前更改spark 保存其临时文件的目录?
特别是,由于我正在编写表的单个分区,因此我希望临时文件夹位于分区文件夹中。
有可能吗?
由于它的实现,没有办法使用默认的 FileOutputCommitter,FileOutputCommiter 创建一个${mapred.output.dir}/_temporary 子目录,文件被写入,然后在提交后移动到${mapred.output。目录}。
最后,删除了整个临时文件夹。当两个或多个 Spark 作业具有相同的输出目录时,文件的相互删除将是不可避免的。
最终,我下载了org.apache.hadoop.mapred.FileOutputCommitter和org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter(您可以将其命名为YourFileOutputCommitter)进行了一些更改,允许 _temporaly 重命名
在您的驱动程序中,您必须添加以下代码:
val conf: JobConf = new JobConf(sc.hadoopConfiguration)
conf.setOutputCommitter(classOf[YourFileOutputCommitter])
// update temporary path for committer
YourFileOutputCommitter.tempPath = "_tempJob1"
Run Code Online (Sandbox Code Playgroud)
注意:最好使用MultipleTextOutputFormat重命名文件,因为写入同一位置的两个作业可以相互覆盖。
更新
我在我们的技术博客中创建了简短的帖子,其中包含更多详细信息 https://www.outbrain.com/techblog/2020/03/how-you-can-set-many-spark-jobs-write-to-the -相同路径/
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |