首页 > 解决方案 > Dask groupby 关于期货

问题描述

我在集群上分散了数据并提交了一个任务。我如何等到所有期货完成并在期货上进行分组。我不想将所有期货都收集回给客户,因为它们很大。我希望所有大型期货都留在集群上并将结果从 groupby 返回给客户端。我在期货上尝试了 pandas groupby 语法,但它说这不是期货上的方法。我正在考虑使用提交,但无法弄清楚语法。

谢谢

def repeat (df, number):
    df=pd.DataFrame(np.repeat(df.values,number,axis=0))
    return df

data = pd.DataFrame(np.random.random_sample((100,), columns=["test"])
data = client.scatter(data)
futures = client.submit(repeat, data, 1000)
data = client.gather(futures)

到目前为止,这还可以。但现在我希望结果留在工人身上并执行以下熊猫操作:

data["ids"] = data.groupby(["test"]).cumcount()
total = data.groupby(["test"]).sum()
P10 = data.groupby(["test"]).quantile(0.1)

我想这样做是因为 Dataframe 数据非常大,并且只适合多个工作人员。我想要返回的只是数据的聚合(即 groupby)

谢谢 EDIT id 列是分组测试列的 cumcount。基本上我想对多个点进行蒙特卡罗模拟。起始 df 包含对应于每个点的行。然后发送到 dask,每行将乘以 1000 以模拟 1000 次模拟试验。ids 用于跟踪试验编号(其中 1000 个),稍后我可以按 id 分组以获得所有点的每次试验的汇总结果。目前,示例代码显示了 groupby 测试,它是每一行(数据点)的聚合。即 1000 次试验中每个点的平均值和 P10

标签: daskdask-distributed

解决方案


推荐阅读