在 PySpark 中指定最大 Parquet 块大小

Posted

技术标签:

【中文标题】在 PySpark 中指定最大 Parquet 块大小【英文标题】:Specify Max Parquet Block Size in PySpark 【发布时间】:2016-04-27 18:49:15 【问题描述】:

我可以成功地将 CSV 文件转换为 Parquet 文件,但是 Parquet 文件被分解成大量 2-3mb 的文件。例如,大约 25gb 的 CSV 被转换为包含 700 多个文件的 Parquet 文件。我的研究表明它应该在 256mb 和 1gb 之间。如何预先指定尺寸?

我看到 Impala 是通过 PARQUET_FILE_SIZE 来实现的。我无法为 PySpark 找到任何东西。下面的示例代码:

df.write.mode("overwrite").parquet("s3n://%s:%s@%s/%s" % (ACCESS_KEY, SECRET_KEY, AWS_BUCKET_NAME, FOLDER_FOR_PARQUET_RESULTS))

【问题讨论】:

【参考方案1】:

试试:

df \
.repartition(100) \
.write \
.mode("overwrite") \
.parquet("s3n://%s:%s@%s/%s" % (ACCESS_KEY, SECRET_KEY, \
AWS_BUCKET_NAME, FOLDER_FOR_PARQUET_RESULTS))

Repartition 会将您的数据帧重新分区为 100 个分区(大小约为 256mb - 未压缩),这应该会创建更大的 parquet 文件。

【讨论】:

对,但是我的原始文件大小会改变,所以我宁愿预先指定文件大小而不是估计分区数。

以上是关于在 PySpark 中指定最大 Parquet 块大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyspark中更改DataFrame的hdfs块大小

如何在货架拣货块中指定拣货策略? - 任何逻辑

如何从查询中指定最大值和最小值?

如何在spark-submit中指定

final

输出超出range()函数中指定的最大值