scala – 在groupBy之后取上前N并将它们视为RDD
发布时间:2020-12-16 18:45:54 所属栏目:安全 来源:网络整理
导读:我想在RDD的groupByKey之后得到前N个项目,并将topNPerGroup的类型(在下面)转换为RDD [(String,Int)],其中List [Int]值被展平 数据是 val data = sc.parallelize(Seq("foo"-3,"foo"-1,"foo"-2,"bar"-6,"bar"-5,"bar"-4)) 每组前N项计算如下: val topNPerGrou
我想在RDD的groupByKey之后得到前N个项目,并将topNPerGroup的类型(在下面)转换为RDD [(String,Int)],其中List [Int]值被展平
数据是 val data = sc.parallelize(Seq("foo"->3,"foo"->1,"foo"->2,"bar"->6,"bar"->5,"bar"->4)) 每组前N项计算如下: val topNPerGroup: RDD[(String,List[Int]) = data.groupByKey.map { case (key,numbers) => key -> numbers.toList.sortBy(-_).take(2) } 结果是 (bar,List(6,5)) (foo,List(3,2)) 由…打印 topNPerGroup.collect.foreach(println) 如果我实现,topNPerGroup.collect.foreach(println)将生成(预期结果!) (bar,6) (bar,5) (foo,3) (foo,2) 解决方法
你的问题有点令人困惑,但我认为这可以满足您的需求:
val flattenedTopNPerGroup = topNPerGroup.flatMap({case (key,numbers) => numbers.map(key -> _)}) 并在repl中打印出你想要的东西: flattenedTopNPerGroup.collect.foreach(println) (foo,2) (bar,5) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |