Skip to main content
 首页 » 编程设计

python之PySpark:迭代 PairRDD 中的值

2024年10月24日32zhengyun_ustc

如何在 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))