分布式分布式计算在for循环的集群中不起作用

问题描述 投票:0回答:1

我无法使用分布式集群来处理此块。

import pandas as pd
from dask import dataframe as dd 
import dask

df = pd.DataFrame({'reid_encod': [[1,2,3,4,5,6,7,8,9,10]]})
dask_df = dd.from_pandas(df, npartitions=3)

def add(dask_df):
    for _, outer_row in dask_df.iterrows():
        for _, inner_row in dask_df.iterrows():
            for base_encod in outer_row['reid_encod']:
               for compare_encod in inner_row['reid_encod']:
                   val = base_encod + compare_encod
    return True

from dask.distributed import Client

client = Client(...)
dask_compute = dask.delayed(add)(dask_df)
dask_compute.compute()

还有两个查询

  1. 在熊猫数据框上进行分布式操作。

  2. 我们可以使用dask.delayed在dask.distributed中。

dask dask-distributed dask-delayed
1个回答
0
投票

您的代码的主要问题已在最佳做法的[本节[[https://docs.dask.org/en/latest/delayed-best-practices.html#don-t-call-dask-delayed-on-other-dask-collections]中进行了概述:请勿将Dask集合传递给延迟的函数。这意味着,您应该使用delayed API dataframeAPI。虽然您可以转换延迟的数据帧,但不建议像这样简单地传递。此外,-您的数据帧中只有一行,因此您只会得到一个分区,而没有并行性。您只能像这样放慢速度。-这似乎是一个万能的操作(N ^ 2),因此,如果您有很多行(Dask的正常情况),那么无论您使用了多少个内核,都将花费极长时间。-在熊猫行中传递列表不是一个好主意,也许您想使用数组?-该函数不会返回任何有用的信息,因此根本不清楚您要实现的目标。在MVCE的描述下,您将看到对“预期结果”和“出了什么问题”的引用。要获得更多帮助,请更精确。

© www.soinside.com 2019 - 2024. All rights reserved.