使用dask.distributed

时间:2016-09-07 17:03:11

标签: python dask

鉴于,我有一个分布式集群:

import distributed
import dask
(distributed.__version__, dask.__version__)

('1.12.1', '0.11.0')

import dask
from distributed import Executor, progress
import dask.dataframe as dd
e = Executor('127.0.0.1:8786',set_as_default=True)
e

<Executor: scheduler="127.0.0.1:8786" processes=2 cores=64>

我创建了一个大型分布式数据框和一个小型数据框,并将其保存到集群中:

large_df = dd.read_csv('s3://bucket/*.csv', parse_dates=['date']) #test is about 50gb
small_df = dd.read_csv('s3://new_bucket/combined_driver_cleaned.csv',blocksize=None) #about 2 gb
large_df = e.persist(large_df)
small_df = e.persist(small_df)

为了使合并步骤更快,我会复制所有工作人员的小数据框

e.replicate(small_df)

e.replicate迅速返回。

然后是加入步骤:

joined = e.persist(large_df.merge(small_df, how='inner', on='join_col'))
del large_df

此时,奇怪的事情开始发生。散景图显示没有活动,并且停留在0/251合并任务。工作日志显示以下内容:

   Sep 07 12:43:55  conda[41833]: distributed.core - INFO - Connection from xx.xxx.xxx.xx:48522 to Worker

ip地址是上述连接中的调度程序机器。我怀疑这是由e.replicate命令引起的。 我可以看到工作节点的内存缓慢增长(顶部命令输出):

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND  
41944 root      20   0  0.175t 0.165t   6104 S 105.3 70.6   9:03.16 dask-work+

这使用了70%的240gb内存,而我的两个数据帧相比要小得多。

这样做的推荐方法是什么?我相信复制占用了所有的空间和很长一段时间。我做了一些根本错误的事情吗?

0 个答案:

没有答案