我正在执行一项需要多个阶段并行处理的任务。
我的问题是:
我有四个数据集。我编写了一个函数来处理这4个数据集。
为了并行处理这4个数据集,我创建了4个集群,然后将4个数据集发送到4个集群。再次,我想将每个群集分成4个群集,因为我必须执行group by
操作。我编写了代码来处理上述问题。但这让我犯了一个错误。这是我的示例代码。
def applyParallel(dfGrouped, func):
retLst = Parallel(n_jobs=2, verbose=10)(delayed(func)(group) for name, group in dfGrouped)
return pd.concat(retLst)
# This is the function to do group by parallel processing.
def new(x):
tsc_out = applyParallel(x.groupby(gbcols), custum_func)
def f1():
from joblib import Parallel, delayed
Parallel(n_jobs=4)(delayed(new)(i) for i in range(4)) #4 data sets
如果仅一次创建集群,则此功能运行正常。如果我们尝试将每个群集拆分为多个群集,它将无法正常工作。
就我而言,我需要创建总计20
个群集。
谢谢。
答案 0 :(得分:1)
如果我正确理解了您的情况,则可以使用charm4py的池执行类似的操作 的工人(有关更多信息,请参见https://charm4py.readthedocs.io/en/latest/pool.html 信息)。例如:
from charm4py import charm
def applyParallel(dfGrouped, func):
retLst = charm.pool.map(func, [group for name, group in dfGrouped], ncores=2)
return pd.concat(retLst)
# This is the function to do group by parallel processing
def new(x):
tsc_out = applyParallel(x.groupby(gbcols), custom_func)
def f1(args):
charm.pool.map(new, [i for i in range(4)], ncores=4, allow_nested=True)
exit()
charm.start(f1)
使用工作人员池,您可以启动任务(我认为这与您所谓的集群相同),并指定多少个核心
您想运行一组给定的任务。虽然我认为您可以
只需离开ncores=-1
,然后让charm4py使用可用的内核来安排任务。
如果您有任务要启动其他任务(如果您使用allow_nested=True
),它也将起作用。
要注意的一件事是,当使用charm4py启动程序时,您将指定要启动的进程数 (您甚至可以在多个主机上启动进程,应用程序可以使用 全部同时)。因此,例如,如果您有8个核心,并且想利用所有 他们,用8个进程启动程序。