当使用 s3a 连接器将数据帧写入 S3 时,似乎没有正式的方法来确定在进程中写入的 s3 上的对象路径。我想要实现的目标只是确定写入 s3 时写入了哪些对象(使用 pyspark 3.2.1 和 hadoop 3.3.2 以及目录提交者)。
这可能有用的原因:
- partitionBy 可能会添加动态数量的新路径
- spark 创建自己的“部分...” Parquet 文件,其名称和编号取决于写入时的分区
在 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 的分类过程中出现的规模问题之一。写入 _SUCCESS 文件的时间开始减慢作业提交时间。它只是用于测试。抱歉。
它只是源代码树中的一个常量。如果您要提供补丁以使其可配置,只要您遵循“说明您运行了所有测试的 AWS 端点,否则我们将忽略您的补丁”政策,我将很乐意进行审查和合并。
我不知道这些东西还在哪里收集。 Spark 驱动程序会被告知每个任务提交的文件数量及其总大小,但不会按任务给出列表,据我所知。
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 添加到输出文件名以避免意外覆盖。你也许可以把它关掉
关于amazon-s3 - 使用 Pyspark 3.2.1 + hadoop 3.3.2 确定写入的对象路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71554579/