【问题标题】:Scala Spark RDD.groupBy where each element can be in multiple groupsScala Spark RDD.groupBy 每个元素可以在多个组中
【发布时间】:2017-09-09 00:23:47
【问题描述】:

假设我有一个倍数列表和一个因子列表(均为 Int):

val multiples = sc.parallelize(List(1,2,3,4,5,6))
val factors = List(1,2,3)

我想在倍数上使用 groupBy 来返回一个 List[(Int, Iterable[Int])] ,这样每一对都代表一个因子,并且该因子的所有倍数都是倍数。像这样:

(1, Iterable(1,2,3,4,5,6))
(2, Iterable(2,4,6))
(3, Iterable(3,6))

问题在于 groupBy 似乎无法跨组复制元素。这是真的吗?

【问题讨论】:

    标签: scala apache-spark group-by rdd


    【解决方案1】:

    你可以在rdd上使用flatMap;对于每个元素,收集作为特定元素除数的因子,这些因子将根据满足条件的因子数进行复制;最后使用groupByKey收集属于同一因子的元素:

    multiples.flatMap(x => factors.collect{ case i if x % i == 0 => (i, x) }).groupByKey.collect
    
    // res4: Array[(Int, Iterable[Int])] = Array((1,CompactBuffer(1, 2, 3, 4, 5, 6)), 
    //                                           (2,CompactBuffer(2, 4, 6)), 
    //                                           (3,CompactBuffer(3, 6)))
    

    【讨论】:

      猜你喜欢
      • 2017-07-28
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多