使用 Pyspark 3.2.1 + hadoop 3.3.2 确定写入的对象路径

determine written object paths with Pyspark 3.2.1 + hadoop 3.3.2

使用 s3a 连接器将数据帧写入 S3 时,似乎没有官方方法可以确定在该过程中写入的 s3 上的对象路径。我想要实现的只是确定在写入 s3 时写入了哪些对象(使用 pyspark 3.2.1 和 hadoop 3.3.2 以及目录提交者)。

这可能有用的原因:

对于 pyspark 3.1.2 和 Hadoop 3.2.0,过去可以使用未被正式支持的“_SUCCESS”文件,该文件写在 S3 上第一次分区之前的路径中,其中包含所有的所有路径书面文件。但是现在,路径的数量似乎限制为 100,这不再是一个选项。

真的没有正式的、合理的方法来完成这个任务吗?

Now however, the number of paths seems to be limited to 100 and this is not a option anymore.

我们不得不在 HADOOP-16570 中削减它...这是在 10-100 TB 的 terasorting 过程中出现的规模问题之一。写入 _SUCCESS 文件的时间开始减慢作业提交时间。它仅用于测试。对不起。

它只是源代码树中的一个常量。如果您要提供补丁以使其可配置,我将很乐意审查和合并,前提是您遵循“说出您 运行 所有测试的 aws 端点,否则我们将忽略您的补丁”政策。

我不知道这些东西是从哪里收集的。 spark 驱动程序被告知每个任务提交的文件数量和它们的总大小,但没有按任务给出列表,不是 AFAIK。

spark creates it's own "part..." parquet files with cryptic names and number depending on the partitions when writing

文件名的part-0001-位来自任务id;之后的位是创建的 uuid 以确保每个文件名都是唯一的 - 请参阅 SPARK-8406 将 UUID 添加到输出文件名以避免意外覆盖。你可以把它关掉