我正在研究镶木地板文件,以了解它们是否适合我的目的。为此,我从一个csv文件加载了一个数据集并将其另存为一个镶木地板数据集:
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版),所以不确定是否提供了所有相关信息。如果缺少某些东西,请发表评论。
编辑: 我发现,以我为例,更少,更大的块更快。这导致最佳块大小的问题。在哪里可以找到有关此信息?
答案 0 :(得分:1)
每个文件大约有15行(5百万/ 330K)行,是的,对于这些小文件使用镶木地板是个坏主意。实木复合地板中的元数据会有开销,并且压缩量将受到限制。基于Parquet Documentation行组的大小最好为512-1024MB,但这是由于HDFS所致。因此,不同的存储方案可能需要不同的大小。通常,文件小于10兆字节可能没有任何意义。