Dask 打印警告使用 client.scatter 虽然我正在使用建议的方法

Dask prints warning to use client.scatter althought I'm using the suggested approach

在 dask distributed 中,我收到以下警告,这是我没有预料到的:

/home/miniconda3/lib/python3.6/site-packages/distributed/worker.py:739: UserWarning: Large object of size 1.95 MB detected in task graph: 
  (['int-58e78e1b34eb49a68c65b54815d1b158', 'int-5cd ... 161071d7ae7'],)
Consider scattering large objects ahead of time
with client.scatter to reduce scheduler burden and 
keep data on workers

    future = client.submit(func, big_data)    # bad

    big_future = client.scatter(big_data)     # good
    future = client.submit(func, big_future)  # good
  % (format_bytes(len(b)), s))

我感到惊讶的原因是,我正在按照警告的建议进行操作:

import dask.dataframe as dd
import pandas
from dask.distributed import Client, LocalCluster

c = Client(LocalCluster())
dask_df = dd.from_pandas(pandas.DataFrame.from_dict({'A':[1,2,3,4,5]*1000}), npartitions=10)
filter_list = c.scatter(list(range(2,100000,2)))
mask = c.submit(dask_df['A'].isin, filter_list)
dask_df[mask.result()].compute()

所以我的问题是:我做错了什么还是这是一个错误?

pandas='0.22.0'
dask='0.17.0'

dask 抱怨的主要原因不是列表,而是 dask 数据帧中的 pandas 数据帧。

dask_df = dd.from_pandas(pandas.DataFrame.from_dict({'A':[1,2,3,4,5]*1000}), npartitions=10)

当您在本地会话中创建 pandas 数据框时,您正在本地创建大量数据。然后你在集群上操作它。这将需要将您的 pandas 数据框移动到集群。

欢迎您忽略这些警告,但总的来说,如果此处的性能比单独使用 pandas 时更差,我不会感到惊讶。

这里还有其他一些事情。您分散的列表会产生一堆期货,这可能不是您想要的。您在 dask 对象上调用提交,这通常是不必要的。