【发布时间】:2017-01-21 01:45:01
【问题描述】:
按照此处的示例:YouTube: Dask-Pandas Dataframe Join 我尝试将 ~70GB Dask 数据帧与我作为 Pandas 数据帧加载的 ~24MB 合并。
合并在 A 和 B 两列上,我没有设置任何索引:
import dask.dataframe as dd
from dask.diagnostics import ProgressBar
small_df = pd.read_csv(dataframe1) # as pandas
large_df = dd.read_csv(dataframe2) #as dask.dataframe
df2 = large_df.merge(small_df, how='left', left_on=leftcolumns, right_on=rightcolumns) #do the merge
A = df2[df2['some column'] == 'somevalue'] #do a reduction that would fit on my computer
pbar = ProgressBar()
pbar.register()
result = A.compute()
我使用的是具有 16GB RAM 和 4 核的 Windows 计算机。 我使用进度条来评估合并过程的进度。我昨晚整晚都离开了它。我今天早上重新启动它,到目前为止大约半小时,进度为 0%。
谢谢你,感谢你的帮助,
更新
我在配备 8GB RAM 的 Mac 上进行了尝试,效果非常好。我相信我有 Anaconda 附带的 Dask 发行版。无论如何,我认为我没有做任何不同的事情。
我按照上述编码(21 分钟)分享我的结果和时间:
In [26]: C = result1.compute()
[########################################] | 100% Completed | 21min 13.4s
[########################################] | 100% Completed | 21min 13.5s
[########################################] | 100% Completed | 21min 13.6s
[########################################] | 100% Completed | 21min 13.6s
更新 2
我在我的 Windows 计算机上更新到最新版本的 Dask,它运行良好。
【问题讨论】:
-
只是一个旁注,在布尔索引中使用
df而不是df2是错误的吗?A = df2[df['some column'] == 'somevalue'] -
哦,抱歉,我才看到你的意思。是的,这是一个错误。我修好了它。谢谢!
-
@dleal,既然这个问题已经解决,您能否提供解决方案作为答案并接受它(即使这是您自己的问题,也鼓励),将其从未回答的列表中删除?谢谢!
-
要添加到@Garrett 的评论:请具体说明您拥有的 Dask 版本以及您刚刚更新到什么。
-
您也可以使用 joblib,并在多个内核上运行该进程。一般的想法是将大型数据集拆分为一组较小的数据集(即
[large_df_part1, ... , large_df_partN],然后使用 joblib 将它们分配给不同的处理器。