如何通过rdd中的键计算x和y坐标的平均值?

问题描述

我有一个键值对形式的 rdd,以质心作为键,所有距离它们最近的点作为列表中的值。

-O0

我正在尝试按键分别计算每个质心的所有 x 和 y 坐标的平均值。我希望生成如下输出

data = [('d1',[(4.832,1.963),(5.439,2.147),(5.009,2.522)]),('d2',[(4.26,2.033),(5.24,1.642),(4.814,2.033)]),('d3',[(4.646,1.827),(5.137,1.858),(5.288,1.842)])]

我尝试了以下代码,但没有得到任何结果。

[('d1',(5.09,2.21)),(4.77,1.9)),(5.02,1.84))]

我有点被困在这里,非常感谢这方面的帮助。

解决方法

不需要按keyreduce,因为数据已经按key分组了。您只需要计算每个条目的平均值,例如使用 numpy.mean

import numpy as np

avg_data = data.map(lambda r: (r[0],tuple(np.mean(r[1],axis=0))))

avg_data.collect()
# [('d1',(5.093333333333334,2.2106666666666666)),#  ('d2',(4.771333333333334,1.9026666666666667)),#  ('d3',(5.023666666666666,1.8423333333333334))]