首页 > 解决方案 > 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 值似乎是一种可能的解决方案。

打开任何其他建议。

谢谢

标签: apache-spark

解决方案


这与新的“s3a 特定提交者”有关吗?如果是这样,这意味着他们正在使用 netflix 的代码/技巧,即在每个写入的文件上使用 GUID,以避免最终的一致性问题。但这并没有多大帮助。

  1. 考虑为 Spark 提供一个补丁,让您可以为文件名添加特定前缀。
  2. 或者对于 Apache Hadoop 和 Spark(即不是 EMR),S3A 提交者在生成临时文件名时添加该前缀的选项。

短期:嗯,你总是可以列出目录树的前后状态(提示:使用 FileSystem.listFiles(path, recursive) 来提高速度),或者记住新文件,或者重命名它们(这将是慢:记住新文件名更好)


推荐阅读