如何迭代RDD中的值(键,值)。
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()
方法
有什么想法吗?还是我们可以做的变化?
答案 0 :(得分:2)
The most efficient thing you can do in this particular case is to use reduceByKey
instead of groupByKey
:
tsRDD.map(lambda x:(x, 1)).reduceByKey(lambda x, y: x + y)
In a general case when you have PairwiseRDD
you can either map
# Python 2
someRDD.map(lambda (k, vs): do_something_with(vs))
# Python 3
someRDD.map(lambda kvs: do_something_wit(kvs[1]))
or mapValues
:
someRDD.mapValues(lambda vs: do_something_with(vs))