pandas df.to_parquet 写入多个较小的文件

Aus*_*tin 15 save pandas snappy parquet pyarrow

是否可以使用 Pandas 的DataFrame.to_parquet功能将写入拆分为多个具有近似所需大小的文件?

我有一个非常大的 DataFrame (100M x 100),并且正在用来df.to_parquet('data.snappy', engine='pyarrow', compression='snappy')写入一个文件,但这会产生一个大约 4GB 的文件。相反,我希望将其分成许多约 100MB 的文件。

Aus*_*tin 18

我最终使用了 Dask:

import dask.dataframe as da

ddf = da.from_pandas(df, chunksize=5000000)
save_dir = '/path/to/save/'
ddf.to_parquet(save_dir)
Run Code Online (Sandbox Code Playgroud)

这会保存到 内的多个 parquet 文件save_dir,其中每个子 DataFrame 的行数是chunksize. 根据您的数据类型和列数,您可以调整此设置以使文件达到所需的大小。


Ran*_*nty 7

另一种选择是使用partition_cols以下选项pyarrow.parquet.write_to_dataset()

import pyarrow.parquet as pq
import numpy as np

# df is your dataframe
n_partition = 100
df["partition_idx"] = np.random.choice(range(n_partition), size=df.shape[0])
table = pq.Table.from_pandas(df, preserve_index=False)
pq.write_to_dataset(table, root_path="{path to dir}/", partition_cols=["partition_idx"])
Run Code Online (Sandbox Code Playgroud)