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

7gyucuyw  于 2022-11-01  发布在  Hadoop
关注(0)|答案(1)|浏览(211)

当使用s3a连接器将 Dataframe 写入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,这不再是一个选项。
难道真的没有一种官方的、合理的方式来实现这一任务吗?

noj0wjuj

noj0wjuj1#

然而,现在路径的数量似乎被限制为100,这不再是一个选项。
我们不得不在HADOOP-16570中削减它...在10-100 TB的terasorting期间出现的一个缩放问题。写入_SUCCESS文件的时间开始减慢作业提交时间。它只用于测试。抱歉。
它只是源代码树中的一个常量。如果您提供了一个修补程序来使其可配置,我将很乐意进行审查和合并,前提是您遵循“说出您运行了所有测试的aws端点,否则我们将忽略您的修补程序”策略。
我不知道这些东西是在哪里收集的。spark驱动程序被告知每个任务提交的文件数量和它们的总大小,但没有按任务提供列表,而不是AFAIK。
spark创建了自己的“部分...” parquet 文件,文件的名称和编号取决于写入时的分区
文件名的0001位部分来自任务ID;后面的位是一个uuid,用于确保每个文件名都是唯一的-请参阅SPARK-8406 * 将UUID添加到输出文件名以避免意外覆盖 *。您可能可以关闭该功能

相关问题