这是将dask数据帧的子集加载到内存的有效方法:
while i < len_df:
j = i + batch_size
if j > len_df:
j = len_df
subset = df.loc[i:j,'source_country_codes'].compute()
我在某处读到这可能不正确,因为dask如何分配索引号,因为它将较大的数据帧划分为较小的pandas dfs。另外,我不认为dask数据帧具有iloc
属性。
我使用的是版本0.15.2
就用例而言,这是一种将批量数据加载到深度学习中的方法(比如keras)。
答案 0 :(得分:1)
如果您的数据集具有众所周知的分部,那么这可能会有效,但我建议您一次只计算一个分区。
for part in df.to_delayed():
subset = part.compute()
您可以通过预先重新分区来粗略控制大小
for part in df.repartition(npartitions=100).to_delayed():
subset = part.compute()
这不完全相同,因为它不保证每个分区中有固定数量的行,但这种保证可能非常昂贵,具体取决于数据的获取方式。