我想从 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()
可能大于我的记忆)。此外,我不确定是否必须提前订购。
如果您有一些关于如何正确实施此内容的建议或需要考虑的事项,我会很高兴!
答案 0 :(得分:1)
这不是您想要的,但可以使用 partition_on
的 .to_parquet
选项:
ddf.to_parquet("file_parquet", schema="infer", partition_on="A")
请注意,这并不能保证每个分区有您想要的一个文件,而是 file_parquet
中会有子文件夹,可能包含多个文件。