代码之家  ›  专栏  ›  技术社区  ›  Austin

熊猫df.to\拼花地板写入多个较小的文件

  •  0
  • Austin  · 技术社区  · 5 年前

    可以用熊猫的眼睛吗 DataFrame.to_parquet 将写入内容拆分为多个近似所需大小的文件的功能?

    我有一个非常大的数据帧(100mx100),并且正在使用 df.to_parquet('data.snappy', engine='pyarrow', compression='snappy') 写入一个文件,但这会导致一个大约4GB的文件。相反,我想把它分成许多~100MB的文件。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Austin    5 年前

    我最后使用了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 ,其中每个子数据帧的行数是 chunksize . 根据您的数据类型和列数,您可以对此进行调整,使文件达到所需的大小。

        2
  •  1
  •   Random Certainty    4 年前

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