如何在 RDD(key,value) 中迭代一个值。
tsRDD.map(lambda x:(x,1)).groupByKey()
返回
[('abc', <pyspark.resultiterable.ResultIterable object at 0xb0e8242c>),
('pqr', <pyspark.resultiterable.ResultIterable object at 0xb0e82a2c>),
('xyz', <pyspark.resultiterable.ResultIterable object at 0xb0e824ac>)]
我想遍历 <pyspark.resultiterable.ResultIterable对象并找到它所有元素的总和。
我试过了
tsRDD.map(lambda x:(x,1))).countByKey().items()
返回
`[('abc', 2), ('pqr', 1), ('xyz', 2)]`
但我需要使用 .map .reduceByKey()方法
有什么想法吗?或者我们可以做的变化?
请您参考如下方法:
在这种特殊情况下,您可以做的最有效的事情是使用 reduceByKey而不是 groupByKey:
tsRDD.map(lambda x:(x, 1)).reduceByKey(lambda x, y: x + y)
在一般情况下,当您拥有 PairwiseRDD 时,您可以 map
# Python 2
someRDD.map(lambda (k, vs): do_something_with(vs))
# Python 3
someRDD.map(lambda kvs: do_something_wit(kvs[1]))
或mapValues:
someRDD.mapValues(lambda vs: do_something_with(vs))
