【问题标题】:Counts of field based on other field in a RDD in pyspark基于 pyspark 中 RDD 中其他字段的字段计数
【发布时间】:2016-06-15 03:43:50
【问题描述】:

使用 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 as 轻松获得第一个字段的不同计数

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

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

.reduceByKey(add)

但这只会给我“a”和“b”的计数,而不考虑第三个字段。我将如何获得它?

【问题讨论】:

    标签: apache-spark pyspark rdd


    【解决方案1】:

    如果你的问题理解得很好,你可能正在寻找这样的东西:

    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)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 2013-07-19
      • 2020-09-20
      • 1970-01-01
      • 2020-08-09
      相关资源
      最近更新 更多