我试图在spark scala中实现kmeans集群。
所以现在我有一个rdd,它看起来像这样-它包含集群中心和数据点。
scala> res2.collect
res54: Array[(Int, Array[Any])] = Array((2,Array(19, 15, 39)), (2,Array(21, 15, 81)), (2,Array(20, 16, 6)), (1,Array(23, 16, 77)), (2,Array(31, 17, 40)), (3,Array(22, 17, 76)), (1,Array(35, 18, 6)), (3,Array(23, 18, 94)), (1,Array(64, 19, 3)), (1,Array(30, 19, 72)))
我的下一步是根据数组的键对数组进行elementwise求和,并将结果除以计数(通过求平均值来找到新的质心集)。
我不知道如何实现这一点,因为简单地使用reducebykey(\ uuuuykey+\)对数组不起作用。
2条答案
按热度按时间h9vpoimq1#
reducebykey应该与数组一起工作。通过count,我假设您的意思是与给定键相关联的元素的数量,可以通过countbykey()找到。这种方法应该有效:
3b6akqbq2#
以下是我的解决方案:
输出