基于pyspark中RDD中其他字段的字段计数
Counts of field based on other field in a RDD in pyspark
使用 pyspark,我有一个如下所示的 RDD
[("a", 0), ("b", 1), ("a", 1), ("a", 0)]
我想做的是构建另一个 RDD,其中包含基于第三个字段的第一个字段的计数。如此有效它将是:
[("a", 0, 2), ("a", 1, 1), ("b", 1, 1)]
这意味着有两个第三字段等于 0 的“a”实例,有一个第三字段等于 1 的“a”实例,还有一个第三字段等于“b”的实例到 1.
我可以通过使用 reduceByKey as
轻松获得第一个字段的不同计数
rdd = sc.parallelize([("a", 0, 2), ("a", 1, 1), ("b", 1, 1)])
.map(lambda row: (row[0], 1))
.reduceByKey(add)
但这只会给我“a”和“b”的计数,而不管第三个字段。我将如何获得它?
如果你的问题理解得很好,你可能正在寻找这样的东西:
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)]
使用 pyspark,我有一个如下所示的 RDD
[("a", 0), ("b", 1), ("a", 1), ("a", 0)]
我想做的是构建另一个 RDD,其中包含基于第三个字段的第一个字段的计数。如此有效它将是:
[("a", 0, 2), ("a", 1, 1), ("b", 1, 1)]
这意味着有两个第三字段等于 0 的“a”实例,有一个第三字段等于 1 的“a”实例,还有一个第三字段等于“b”的实例到 1.
我可以通过使用 reduceByKey as
轻松获得第一个字段的不同计数rdd = sc.parallelize([("a", 0, 2), ("a", 1, 1), ("b", 1, 1)])
.map(lambda row: (row[0], 1))
.reduceByKey(add)
但这只会给我“a”和“b”的计数,而不管第三个字段。我将如何获得它?
如果你的问题理解得很好,你可能正在寻找这样的东西:
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)]