Spark RDD 查找键值对的比率
Spark RDD find ratio of for key-value pairs
我的 rdd 包含这样的键值对:
(key1, 5),
(key2, 10),
(key3, 20),
我想执行一个映射操作,将每个键与其在整个rdd中的尊重比相关联,例如:
(key1, 5/35),
(key2, 10/35),
(key3, 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), ('key2', 0.2857142857142857), ('key3', 0.5714285714285714)]
在 Scala 中会是
val rdd = sc.parallelize(List(("key1", 5), ("key2", 10), ("key3", 20)))
val total = rdd.values.reduce(_+_)
val rdd2 = rdd.mapValues(1.0*_/total)
rdd2.collect
// Array[(String, Double)] = Array((key1,0.14285714285714285), (key2,0.2857142857142857), (key3,0.5714285714285714))
我的 rdd 包含这样的键值对:
(key1, 5),
(key2, 10),
(key3, 20),
我想执行一个映射操作,将每个键与其在整个rdd中的尊重比相关联,例如:
(key1, 5/35),
(key2, 10/35),
(key3, 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), ('key2', 0.2857142857142857), ('key3', 0.5714285714285714)]
在 Scala 中会是
val rdd = sc.parallelize(List(("key1", 5), ("key2", 10), ("key3", 20)))
val total = rdd.values.reduce(_+_)
val rdd2 = rdd.mapValues(1.0*_/total)
rdd2.collect
// Array[(String, Double)] = Array((key1,0.14285714285714285), (key2,0.2857142857142857), (key3,0.5714285714285714))