问题描述
我有一个键值对形式的 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))]