您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Python计算Spark中成对(K,V)RDD中每个KEY的平均值

使用Python计算Spark中成对(K,V)RDD中每个KEY的平均值

现在,更好的方法是使用该rdd.aggregateByKey()方法。因为该方法在Apache Spark和Python文档中的记录非常少-这就是我编写此问与答的原因 -直到最近我一直在使用上述代码序列。但是同样,它的效率较低,因此除非必要,否则 这样做。

这是使用rdd.aggregateByKey()方法( )进行相同操作的方法

通过KEY,同时计算SUM(我们要计算的平均值的分子)和COUNT(我们要计算的平均值的分母):

>>> aTuple = (0,0) # As of python3, you can't pass a literal sequence to a function.
>>> rdd1 = rdd1.aggregateByKey(aTuple, lambda a,b: (a[0] + b,    a[1] + 1),
                                       lambda a,b: (a[0] + b[0], a[1] + b[1]))

关于上面每个ab对的含义,以下内容是正确的(因此您可以直观地看到正在发生的事情):

   First lambda expression for Within-Partition Reduction Step::
   a: is a TUPLE that holds: (runningSum, runningCount).
   b: is a SCALAR that holds the next Value

   Second lambda expression for Cross-Partition Reduction Step::
   a: is a TUPLE that holds: (runningSum, runningCount).
   b: is a TUPLE that holds: (nextPartitionsSum, nextPartitionsCount).

最后,计算每个KEY的平均值,并收集结果。

>>> finalResult = rdd1.mapValues(lambda v: v[0]/v[1]).collect()
>>> print(finalResult)
      [(u'2013-09-09', 11.235365503035176),
       (u'2013-09-01', 23.39500642456595),
       (u'2013-09-03', 13.53240060820617),
       (u'2013-09-05', 13.141148418977687),
   ... snip ...
  ]

我希望这个问题和答案aggregateByKey()会有所帮助。

python 2022/1/1 18:34:10 有310人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶