将非常大的 csv 文件拆分为较小的文件

Splitting very large csv files into smaller files

Dask 是否适合并行读取大型 csv 文件并将它们拆分为多个较小的文件?

嗨,Nutsa Nazgaide,欢迎来到 SO。首先,我建议您阅读有关 how-to-ask and mcve 的内容。您的问题已经足够好了,但是生成原始数据框的样本会很棒。我将生成一个基本数据框,但逻辑在您的情况下不应有太大差异,因为您只需要考虑位置。

生成数据帧

import dask.dataframe as dd
import numpy as np
import pandas as pd
import string

letters = list(string.ascii_lowercase)

N = int(1e6)
df = pd.DataFrame({"member":np.random.choice(letters, N),
                   "values":np.random.rand(N)})

df.to_csv("file.csv", index=False)

每个成员一个 parquet 个文件(文件夹)

如果您愿意将输出设置为 parquet,您可以使用选项 partition_on as

df = dd.read_csv("file.csv")
df.to_parquet("output", partition_on="member")

如果您真的需要 csv 您可以转换成这种格式。我强烈建议您将数据移动到 parquet.

是的,dask 可以读取大型 CSV 文件。它会将它们分成块

df = dd.read_csv("/path/to/myfile.csv")

然后,在保存的时候,Dask总是将CSV数据保存到多个文件中

df.to_csv("/output/path/*.csv")

有关更多信息,请参阅 read_csv 和 to_csv 文档字符串。