参考这里的示例: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内存和4个核心的Windows计算机。我使用进度条来评估合并过程的进度。昨晚我把它留了一整夜,今天早上重启后,目前已经过去了大约半个小时,但进展仍然是0%。
谢谢您的帮助,我很感激。
更新
我在我的8GB内存的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']
- Khris[large_df_part1,...,large_df_partN]
),然后使用joblib将它们分配给不同的处理器。 - Quantum_Something