从 dask 数据框中保存多个镶木地板文件

时间:2021-04-09 11:35:35

标签: python dask parquet

我想从 Dask 数据框中保存多个镶木地板文件,一个用于特定列中所有唯一值的镶木地板文件。因此,镶木地板文件的数量应等于该列中唯一值的数量。

例如,给定以下数据框,我想保存四个镶木地板文件,因为“A”列中有四个唯一值。

import pandas as pd
from dask import dataframe as dd

df = pd.DataFrame(
    {
        "A": [1, 1, 2, 3, 1, 3, 6, 6],
        "B": ["A", "L", "C", "D", "A", "B", "A", "B"],
        "C": [1, 2, 3, 4, 5, 6, 7, 8],
    }
)
ddf = dd.from_pandas(df, npartitions=2)

for i in ddf["A"].unique().compute():
    ddf.loc[ddf["A"] == i].to_parquet(f"file_{i}.parquet", schema="infer")

我不确定循环 Dask 数据帧是否是扩大规模的正确方法(可能 unique().compute() 可能大于我的记忆)。此外,我不确定是否必须提前订购。

如果您有一些关于如何正确实施此内容的建议或需要考虑的事项,我会很高兴!

1 个答案:

答案 0 :(得分:1)

这不是您想要的,但可以使用 partition_on.to_parquet 选项:

ddf.to_parquet("file_parquet", schema="infer", partition_on="A")

请注意,这并不能保证每个分区有您想要的一个文件,而是 file_parquet 中会有子文件夹,可能包含多个文件。