Spack [Scala]:通过键减少嵌套的元组值

问题描述 投票:0回答:1

假设我有一个名为mention_rdd的RDD的Spark Scala程序,如下所示:

(name, (filename, sum))
...
(Maria, (file0, 3))
(John, (file0, 1))
(Maria, (file1, 6))
(Maria, (file2, 1))
(John, (file2, 3))
...

我们拥有文件名和每个名称的出现次数。

我想为每个名称减少并查找出现次数最多的文件名。例如:

(name, (filename, max(sum))
...
(Maria, (file1, 6))
(John, (file2, 3))
...

[我试图自己访问RDD的(filename,sum)元组,所以我可以从那里减少name(由于错误,我说我无法从mention_rdd遍历,因为(String,Int)是不是TraversableOnce类型):

val output = mention_rdd.flatMap(file_counts => file_counts._2.map(file_counts._2._1, file_counts._2._2))   
        .reduceByKey((a, b) => if (a > b) a else b)

但是我得到一个错误,说值映射不是(String,Int)的成员

这是否可以在Spark中完成?如果是这样,怎么办?我的方法从一开始就存在缺陷吗?

scala apache-spark mapreduce rdd reduce
1个回答
0
投票

为什么不只是:

val output = mention_rdd.reduceByKey {
  case ((file1, sum1), (file2, sum2)) =>
    if (sum2 >= sum1) (file2, sum2)
    else (file1, sum1)
}
© www.soinside.com 2019 - 2024. All rights reserved.