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

标签 amazon-s3 hadoop pyspark filepath

当使用 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/

相关文章:

node.js - AWS Lambda 函数在完成请求之前退出

amazon-s3 - 从 Glacier 迁移到 S3 Glacier Deep Archive

java - 特定表的 hbase-default.xml 中单元格的最大大小

hadoop - 用 pyspark 编写的 hive 查询是针对 spark 还是针对 hive 运行的?

hadoop - 使用 Hadoop Pig 生成多个输出

python - Spark : pyspark crash for some datasets - ubuntu

apache-spark - Spark 读取分区 avro 比指向确切位置慢得多

java - Mule 和 Java - 字节 [] 到文件

apache-spark - 在 Pyspark 中将稀疏向量转换为密集向量

php 在 s3 导入的图像上添加水印