pyarrow.parquet.write_to_dataset() 在使用 partition_cols 时非常慢

pyarrow.parquet.write_to_dataset() extremely slow when using partition_cols

我正在研究 parquet 文件以了解它们是否适合我的目的。为此,我从 csv 文件加载数据集并将其保存为 parquet 数据集:

import pandas as pd          # version 0.25
import pyarrow as pa         # version 0.15
import pyarrow.parquet as pq

df = pd.read_csv('my.csv')

df_table = pa.Table.from_pandas(df)
pq.write_to_dataset(df_table, root_path='my.parquet')

这工作正常而且非常快(~ 1 分钟)。但是,当我尝试编写这样的分区镶木地板数据集时,

pq.write_to_dataset(df_table, root_path='my.parquet', partition_cols=['id'])

需要半个多小时。这似乎很奇怪。我尝试将 id 列设置为索引,但变化不大。我错过了什么吗?

文件的一些背景:~ 500 万行,9 列。 id 列包含约 330,000 个不同的值。将数据集分成这么小的部分只是一个坏主意吗?


我是 Python 的新手(我使用的是 3.6.4 版),所以我不确定我是否提供了所有相关信息。如有遗漏请评论。


编辑: 我发现在我的例子中,更少、更大的块更快。这导致了最佳块大小的问题。我在哪里可以找到这方面的信息?

每个文件约 15(500 万/330K)行,是的,对这样的小文件使用镶木地板是个坏主意。 parquet 中的元数据存在开销,压缩量将受到限制。基于 Parquet Documentation 的行组大小最好为 ~512-1024MB,但这是由于 HDFS。因此,不同的存储场景可能需要不同的大小。一般来说,对于小于 10 兆字节的文件,它可能没有意义。