如何迭代 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()
方法
有什么想法吗?或者我们可以做一些变化?
最佳答案
在这种特殊情况下,您可以做的最有效的事情就是使用 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))
关于python - PySpark:迭代 PairRDD 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31137960/