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

den*_*s-w 6 python python-3.x dask dask-distributed

在分布式的dask中,我收到以下警告,这是我不希望的:

/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))
Run Code Online (Sandbox Code Playgroud)

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

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()
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:我是在做错什么还是错误?

pandas='0.22.0'
dask='0.17.0'
Run Code Online (Sandbox Code Playgroud)

MRo*_*lin 4

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

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

当您在本地会话中创建 pandas 数据框时,您正在本地创建大量数据。然后您可以在集群上对其进行操作。这需要将 pandas 数据框移动到集群。

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

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