如何解决熊猫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"])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。