gpt4 book ai didi

apache-spark - 如何控制使用 partitionBy 时生成的 parquet 文件的数量

转载 作者:行者123 更新时间:2023-12-03 17:07:38 27 4
gpt4 key购买 nike

我有一个 DataFrame我需要根据特定的分区写入 S3。代码如下所示:

dataframe
.write
.mode(SaveMode.Append)
.partitionBy("year", "month", "date", "country", "predicate")
.parquet(outputPath)
partitionBy将数据分成相当多的文件夹(~400),每个文件夹中只有一点数据(~1GB)。问题来了 - 因为 spark.sql.shuffle.partitions 的默认值是 200,每个文件夹中的 1GB 数据被拆分为 200 个小的 parquet 文件,导致总共写入大约 80000 个 parquet 文件。由于多种原因,这不是最佳选择,我想避免这种情况。

我当然可以设置 spark.sql.shuffle.partitions到一个小得多的数字,比如 10,但据我所知,这个设置还控制了连接和聚合中洗牌的分区数,所以我真的不想改变这一点。

有谁知道是否有另一种方法来控制写入多少文件?

最佳答案

正如您正确指出的,spark.sql.shuffle.partitions仅适用于 SparkSQL 中的 shuffle 和 join。
partitionByDataFrameWriter (你挪开
来自 DataFrameDataFrameWriter一通电话write ) 只是对之前的分区数进行操作。 (作者的partitionBy只给将要写出的table/parquet文件分配了列,所以和分区数没有关系。这个有点乱。)

长话短说,只是 repartition DataFrame在你把它变成作家之前。

关于apache-spark - 如何控制使用 partitionBy 时生成的 parquet 文件的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823172/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com