PySpark:迭代PairRDD中的值

时间:2015-06-30 12:11:45

标签: python apache-spark pyspark

如何迭代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()方法

有什么想法吗?还是我们可以做的变化?

1 个答案:

答案 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))