Python dask 懒惰地迭代 series.unique() 值

Python dask iterate series.unique() values lazily

我正在使用 python 2.7 和 dask 数据帧

我有一个 df,它对于内存来说太大了,但很适合放入磁盘。

我按索引分组,然后需要遍历这些组,我找到了 怎么做。

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

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

我收到一个错误

File "/usr/local/lib/python2.7/dist-packages/dask/dataframe/core.py", line 1709, in getitem raise NotImplementedError() NotImplementedError

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

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

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

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

如何使用迭代器值而不将它们全部保存到内存中?

如果所有唯一值都适合内存,则预先调用计算

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

否则我建议用镶木地板之类的东西写入磁盘,然后迭代它

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