微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何配置 Spark / Glue 以避免在 Glue 作业成功执行后创建空的 $_folder_$

如何解决如何配置 Spark / Glue 以避免在 Glue 作业成功执行后创建空的 $_folder_$

我有一个glue 工作流程触发的简单胶水 etl 作业。它从爬虫表中删除重复数据并将结果写回 S3 存储桶。作业已成功完成。但是,spark 生成“$folder$”的空文件夹保留在 s3 中。它在层次结构中看起来不太好并会导致混乱。有没有办法在成功完成作业后配置 spark 或胶水上下文来隐藏/删除这些文件夹?

enter image description here

---------------------S3 图像 ---------------------

enter image description here

解决方法

好的,经过几天的测试,我终于找到了解决方案。在粘贴代码之前,让我总结一下我发现的内容......

  • 那些 $folder$ 是通过 Hadoop 创建的。当在 S3 存储桶中创建文件夹时,Apache Hadoop 会创建这些文件。 Source1 它们实际上是作为路径 + / 的目录标记。 Source 2
  • 要更改行为,您需要更改 Spark 上下文中的 Hadoop S3 写入配置。阅读thisthisthis
  • 阅读有关 S3、S3a 和 S3n herehere
  • 感谢@stevel 的评论here

现在的解决方案是在Spark context Hadoop中设置如下配置。

sc = SparkContext()
hadoop_conf = sc._jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3.impl","org.apache.hadoop.fs.s3a.S3AFileSystem")

为了避免创建 SUCCESS 文件,您还需要设置以下配置: hadoop_conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs","false")

确保您使用 S3 URI 写入 s3 存储桶。例如:

myDF.write.mode("overwrite").parquet('s3://XXX/YY',partitionBy['DDD'])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。