Spark 中的总和变坏了

2023-12-30

基于KMeans 的不平衡因子? https://stackoverflow.com/questions/39235576/unbalanced-factor-of-kmeans,我试图计算不平衡因子,但失败了。

RDD 的每个元素r2_10是一对,其中键是簇,值是点的元组。这些都是身份证。下面我介绍一下发生的情况:

In [1]: r2_10.collect()
Out[1]: 
[(0, ('438728517', '28138008')),
 (13824, ('4647699097', '6553505321')),
 (9216, ('2575712582', '1776542427')),
 (1, ('8133836578', '4073591194')),
 (9217, ('3112663913', '59443972', '8715330944', '56063461')),
 (4609, ('6812455719',)),
 (13825, ('5245073744', '3361024394')),
 (4610, ('324470279',)),
 (2, ('2412402108',)),
 (3, ('4766885931', '3800674818', '4673186647', '350804823', '73118846'))]

In [2]: pdd = r2_10.map(lambda x: (x[0], 1)).reduceByKey(lambda a, b: a + b)

In [3]: pdd.collect()
Out[3]: 
[(13824, 1),
 (9216, 1),
 (0, 1),
 (13825, 1),
 (1, 1),
 (4609, 1),
 (9217, 1),
 (2, 1),
 (4610, 1),
 (3, 1)]

In [4]: n = pdd.count()

In [5]: n
Out[5]: 10

In [6]: total = pdd.map(lambda x: x[1]).sum() 

In [7]: total
Out[7]: 10

and total应该有总点数。然而,是10……目标是22!

我在这里缺少什么?


问题是因为您错过了计算每个簇中分组的点数,因此您必须更改方式pdd被创建。

pdd = r2_10.map(lambda x: (x[0], len(x[1]))).reduceByKey(lambda a, b: a + b)

但是,您可以在一次传递中获得相同的结果(无需计算pdd),通过映射的值RDD然后通过使用减少sum.

total = r2_10.map(lambda x: len(x[1])).sum()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中的总和变坏了 的相关文章

随机推荐