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

How to calculate average of x and y coordinates by key in an rdd?

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

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)])]

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

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

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

data.reduceByKey(lambda x,y: mean(x[1],y[1])).collect()

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

您不需要按键归约,因为数据已经按键分组。您只需要计算每个条目的平均值,例如使用 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))]