微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spark RDD 查找键值对的比率

如何解决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 举报,一经查实,本站将立刻删除。