【问题标题】:Complex reduceByKey operation in Spark to compute multiple aggr. fields + count distSpark 中复杂的 reduceByKey 操作来计算多个 aggr。字段 + 计数分布
【发布时间】:2016-01-15 09:45:09
【问题描述】:

我有这个 RDD (id, (a, b, c)),其中 c 是一个字符串,可以针对不同的 id 重复。 id 也可以重复。 现在,我需要按 id 聚合,聚合将是“ 总和(一), 总和(b) 计数不同 (c)。

我正在考虑使用 reduceByKey,我知道如何将其用于求和部分,但不知道如何为不同的计数执行操作

理想情况下,我想的是这样的:

RDD.reduceByKey((x,y)=> (x._1 + y._1, x._2 + y._2, countDistinct(x._3, y._3)))

有什么想法吗?非常感谢!

* 更新 (1) * 目前我能做的最好的事情是:

RDD.reduceByKey((x,y)=> (x._1 + y._1, x._2 + y._2, (x._3 + "," + y._3))).map(row => row._1, row._2._1, row._2._2, row._2._3.split(",").distinct.length

【问题讨论】:

    标签: count apache-spark reduce


    【解决方案1】:

    我现在能想到的最好的方法是使用中间集,然后检查它的大小。我会考虑是否有一种方法可以做到这一点

    RDD.aggregateByKey((0,0,Set[Int]()))(
      (x,y) => (x._1 + y._1, x._2 + y._2, x._3 + y._3),
      (x,y) => (x._1 + y._1, x._2 + y._2, x._3 ++ y._3)
    ).mapValues(x => (x._1, x._2, x._3.size))
    

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      相关资源
      最近更新 更多