【问题标题】:Spark scala filter tuples in a list列表中的 Spark scala 过滤器元组
【发布时间】:2016-09-13 04:28:28
【问题描述】:

我有一个如下所示的 Rdd

val m = sc.parallelize(Seq(("a",("x",1)), ("a",("y",2)), ("a",("z",2)), ("b",("x",1)),("b",("y",2))))

我使用下面的 groupByKey 转换了上面的 Rdd

val b = m.groupByKey.mapValues( _.toList)

结果:

(a,List((x,1), (y,2), (z,2)))
(b,List((x,1), (y,2))) 

现在,我想过滤每个列表中具有最大值的元组 所以预期的结果是

(a,List((y,2), (z,2)))
(b,List((y,2)))

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    考虑给定的序列是: val m = Seq(("a",("x",1)), ("a",("y",2)), ("a",("z",2)), ("b",("x",1)),("b",("y",2)))

    val r1 = 
      m.groupBy(_._1)
       .map { case (k, v) => k -> v.map(_._2) }
       .map { case (k, v) => 
         k -> { 
           val sorted = v.sortWith { case (x, y) => x._2 > y._2 }
           val max = sorted.head._2
    
           sorted.takeWhile(_._2 == max) 
         }
       }
       .toList
    

    结果如下: r1: List[(String, Seq[(String, Int)])] = List((b,List((y,2))), (a,List((y,2), (z,2))))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-27
      • 2016-11-15
      • 2012-10-18
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      相关资源
      最近更新 更多