基于pyspark

时间:2016-03-02 10:34:16

标签: apache-spark pyspark rdd

使用 pyspark ,我有一个看起来像这样的RDD

[("a", 0), ("b", 1), ("a", 1), ("a", 0)]

我想做的是根据第三个字段构建另一个带有第一个字段计数的RDD。如此有效:

[("a", 0, 2), ("a", 1, 1), ("b", 1, 1)]

这意味着有两个“a”实例,第三个字段等于0,并且有一个“a”实例,第三个字段等于1,并且有一个实例“b”,第三个字段等于1

我可以使用 reduceByKey 轻松获取第一个字段的不同计数

  

rdd = sc.parallelize([(“a”,0,2),(“a”,1,1),(“b”,1,1)]

     

.map(lambda row:(row [0],1))

     

.reduceByKey(添加)

但这只会给我“a”和“b”的计数,而不管第三场。我怎样才能获得这个呢?

1 个答案:

答案 0 :(得分:2)

If understood your question good, you are probably looking for something like this :

from operator import add

rdd = sc.parallelize([("a", 0), ("b", 1), ("a", 1), ("a", 0)])
        .map(lambda row: ((row[0],row[1]), 1))
        .reduceByKey(add)
        .map(lambda row : (row[0][0],row[0][1],row[1]))
print(rdd.collect())

# [('a', 1, 1), ('a', 0, 2), ('b', 1, 1)]