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

问题描述

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

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

解决方法

我最终使用了Dask:

import dask.dataframe as da

ddf = da.from_pandas(df,chunksize=5000000)
save_dir = '/path/to/save/'
ddf.to_parquet(save_dir)

这将保存到save_dir内的多个镶木文件中,其中每个子DataFrame的行数为chunksize。根据您的dtypes和列数,您可以对其进行调整以使文件达到所需的大小。

,

另一个选择是使用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"])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...