Python 使用Dask通过部件高效读取大型csv文件

Python 使用Dask通过部件高效读取大型csv文件,python,csv,dask,dask-dataframe,Python,Csv,Dask,Dask Dataframe,现在,我正在使用Dask读取大型csv文件,并对其进行一些后处理(例如,进行一些数学运算,然后通过某种ML模型进行预测,并将结果写入数据库)。 避免加载内存中的所有数据,我希望按当前大小的块读取:读取第一个块、预测、写入、读取第二个块等等 我使用skiprows和nrows尝试了下一个解决方案: import dask.dataframe as dd read_path = "medium.csv" # Read by chunk skiprows = 100000 nrows = 50000

现在,我正在使用Dask读取大型csv文件,并对其进行一些后处理(例如,进行一些数学运算,然后通过某种ML模型进行预测,并将结果写入数据库)。 避免加载内存中的所有数据,我希望按当前大小的块读取:读取第一个块、预测、写入、读取第二个块等等

我使用
skiprows
nrows
尝试了下一个解决方案:

import dask.dataframe as dd
read_path = "medium.csv"

# Read by chunk
skiprows = 100000
nrows = 50000
res_df = dd.read_csv(read_path, skiprows=skiprows)
res_df = res_df.head(nrows)

print(res_df.shape)
print(res_df.head())
但我得到了一个错误:

ValueError:示例不够大,无法包含至少一行 数据。请在调用中增加
sample
中的字节数
read\u csv
/
read\u表

另外,据我所知,它将在每次([False,False,…,True,…])为所有数据计算二进制掩码,以查找要加载的行。我们怎样才能做得更有效率?
可能使用dask中的一些分布式或延迟函数?

dask数据帧将为您划分数据,您不需要使用
nrows/skip_rows

df = dd.read_csv(filename)
如果您想选择一个特定的分区,那么可以使用分区访问器

part = df.partitions[i]
但是,您可能还希望并行应用函数

df.map_partitions(process).to_csv("data.*.csv")