如何将小的镶木地板文件组合成一个大的镶木地板文件?

How to combine small parquet files to one large parquet file?

我有一些指向 parquet 文件的分区配置单元表。现在每个分区都有很多小的 parquet 文件,每个大小大约 5kb,我想将这些小文件合并到每个分区的一个大文件中。我怎样才能做到这一点来提高我的蜂巢性能? 我尝试将分区中的所有镶木地板文件读取到 pyspark 数据帧并将组合数据帧重写到同一分区并删除旧文件。但出于某种原因,这对我来说似乎效率低下或初学者级别。这样做的利弊是什么? 并且,如果有任何其他方法,请指导我在 spark 或 pyspark 中实现它。

您可以读取整个数据,repartition 通过您拥有的分区,然后使用 partitionBy 写入(这也是您将来保存它们的方式)。类似于:

spark\
    .read\
    .parquet('...'))\
    .repartition('key1', 'key2',...)\
    .write\
    .partitionBy('key1', 'key2',...)\
    .option('path', target_part)\
    .saveAsTable('partitioned')