我正在使用一些github用户数据,并试图创建一个同一城市的所有人的图表。为此,我需要使用dask中的合并操作。不幸的是,github的用户基数是6M,合并操作似乎正在导致最终的数据帧爆炸。我使用了以下代码
import dask.dataframe as dd
gh = dd.read_hdf('data/github.hd5', '/github', chunksize=5000, columns=['id', 'city']).dropna()
st = dd.read_hdf('data/github.hd5', '/github', chunksize=5000, columns=['id', 'city']).dropna()
mrg = gh.merge(st, on='city').drop('city', axis=1)
mrg['max'] = mrg.max(axis=1)
mrg['min'] = mrg.min(axis=1)
mrg.to_castra('github')我可以使用这段代码合并其他条件,比如名称/用户名,但是当我尝试运行上面的代码时,我得到了MemoryError。
我已经尝试过使用同步/多处理和线程调度程序来运行它。
我正尝试在一台内存为8 8GB的戴尔笔记本电脑i7 4core上执行此操作。是不是应该以分块的方式来执行这个操作,或者我是不是搞错了?使用pandas数据帧迭代器编写代码是唯一的出路吗?
发布于 2021-10-05 05:11:11
不再支持Castra,因此建议使用HDF。根据注释,使用to_hdf()写入多个文件解决了内存错误:
mrg.to_hdf('github-*.hdf')
相关文档:https://docs.dask.org/en/latest/generated/dask.dataframe.DataFrame.to_hdf.html
https://stackoverflow.com/questions/39114990
复制相似问题