apache-spark - Spark标记文件名以便以后可能删除/回滚?
问题描述
我在 AWS EMR 中使用 Spark 2.4。我在我的 ELT/ETL 中使用 Pyspark 和 SparkSQL,并在 AWS S3 上使用带有 Parquet 输入和输出的 DataFrames。
从Spark 2.4开始,据我所知,没有办法标记或自定义输出文件(parquet)的文件名。请纠正我?
当我在 S3 上存储 parquet 输出文件时,我最终得到的文件名如下所示:
零件 43130-4fb6c57e-d43b-42bd-afe5-3970b3ae941c.c000.snappy.parquet
文件名的中间部分看起来像是嵌入了 GUID/UUID :
部分43130-4fb6c57e-d43b-42bd- afe5-3970b3ae941c.c000.snappy.parquet
我想知道是否可以在运行时从 PySpark 或 SparkSQL 函数获取此 GUID/UUID 值,以在文本文件中记录/保存/显示此值?
我需要记录此 GUID/UUID 值,因为我可能需要稍后删除具有此值作为其名称的一部分的文件,以便手动回滚(例如,我可能会在一天或一周后发现此数据不知何故损坏并需要删除,因此可以识别和删除所有带有 GUID/UUID 标记的文件)。
我知道我可以在 GUID 列上手动对表进行分区,但最终分区太多,因此会损害性能。我需要为每个数据加载作业以某种方式标记文件,以便我可以轻松地从 S3 中识别和删除它们,因此 GUID/UUID 值似乎是一种可能的解决方案。
打开任何其他建议。
谢谢
解决方案
这与新的“s3a 特定提交者”有关吗?如果是这样,这意味着他们正在使用 netflix 的代码/技巧,即在每个写入的文件上使用 GUID,以避免最终的一致性问题。但这并没有多大帮助。
- 考虑为 Spark 提供一个补丁,让您可以为文件名添加特定前缀。
- 或者对于 Apache Hadoop 和 Spark(即不是 EMR),S3A 提交者在生成临时文件名时添加该前缀的选项。
短期:嗯,你总是可以列出目录树的前后状态(提示:使用 FileSystem.listFiles(path, recursive) 来提高速度),或者记住新文件,或者重命名它们(这将是慢:记住新文件名更好)
推荐阅读
- visual-studio-2017 - 未找到指定的 Microsoft.NETCore.App',版本 '2.0.7'
- javascript - Javascript:如果滚动到特定目标淡出,如果再次向上滚动,则淡入
- spring - 为单个 Spring Boot 实例配置多个模板解析器
- java - 自动发送电子邮件
- angular6 - angular 6 通用问题“未找到模块:错误:无法解析“/var/www/html/angular6/testing”中的“./dist/server/main”
- javascript - 通过 ajax 请求观察 div 突变
- javascript - Jquery .load 用于烧瓶\python 上的更新片段
- c# - 通过 EF6 在方法链接上获取生成的 sql
- react-native - 排毒(Android):device.reloadReactNative 失败
- c# - 在 Dynamics 365 中正确创建 SalesOrder