如何解决Spark RDD 查找键值对的比率
我的 rdd 包含这样的键值对:
(key1,5),(key2,10),(key3,20),
我想执行一个map操作,将每个key与其在整个rdd中的尊重比例相关联,例如:
(key1,5/35),10/35),20/35),
我正在努力寻找一种使用标准函数执行此操作的方法,我们将不胜感激。
解决方法
您可以计算总和并将每个值除以总和:
from operator import add
rdd = sc.parallelize([('key1',5),('key2',10),('key3',20)])
total = rdd.values().reduce(add)
rdd2 = rdd.mapValues(lambda x: x/total)
rdd2.collect()
# [('key1',0.14285714285714285),0.2857142857142857),0.5714285714285714)]
在 Scala 中是
val rdd = sc.parallelize(List(("key1",("key2",("key3",20)))
val total = rdd.values.reduce(_+_)
val rdd2 = rdd.mapValues(1.0*_/total)
rdd2.collect
// Array[(String,Double)] = Array((key1,(key2,(key3,0.5714285714285714))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。