Python dask迭代series.unique()值lazily

时间:2017-11-05 08:15:07

标签: python database dataframe bigdata dask

我正在使用带有dask数据帧的python 2.7

我有一个df,它对于内存来说太大了,但是非常适合磁盘。

我按索引进行分组,并且需要迭代这些组,我发现here该怎么做。

当我尝试使用建议的代码时:

for value in drx["col"].unique():
    print value

我收到错误

  

文件“/usr/local/lib/python2.7/dist-packages/dask/dataframe/core.py”,   第1709行, getitem       raise NotImplementedError()NotImplementedError

假设它没有实现,我发现迭代我使用unique()得到的系列的方法是this

但是当我试图像这样使用它时:

data = table["col"].unique()
it = data.iteritems()
for val in it:
    print 1

只要我使用迭代器,我的内存就会爆炸,好像所有列的值都保存在内存中一样。

如何在不将所有迭代器值保存到内存中的情况下使用迭代器值?

1 个答案:

答案 0 :(得分:4)

如果所有唯一值都适合内存,则事先调用compute

for item in df[col].unique().compute()
    ...

否则我建议使用像镶木地板这样的东西写入磁盘然后迭代

df[col].unique(split_out=10).to_parquet(...)
s = dd.read_parquet(...)
for item in s.iteritems():
    ...