Я балуюсь паркетными напильниками, чтобы понять, подходят ли они для моих целей. Для этого я загружаю набор данных из файла 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
в качестве индекса, но это не сильно изменилось. Я что-то упускаю?
Немного предыстории файла: ~ 5 миллионов строк, 9 столбцов. Столбец id
содержит ~ 330 000 различных значений. Разве это плохая идея - разбивать набор данных на такие маленькие части?
Я новичок в Python (использую версию 3.6.4), поэтому не уверен, что предоставил всю необходимую информацию. Прокомментируйте, если чего-то не хватает.
РЕДАКТИРОВАТЬ: Я обнаружил, что в моем случае меньшее количество больших фрагментов выполняется быстрее. Это приводит к вопросу об оптимальном размере блока. Где я могу найти информацию об этом?