减少Spark中的元组列表

时间:2014-10-09 21:48:42

标签: scala apache-spark

我有一个元组列表:val re = List((2,3), (3,5), (2,4))

我试图减少这个List,以便对元组的每个第二个参数求和。

所以List((2,3), (3,5), (2,4))

变为

List((2,7) , (3,5))

我一直在研究Scala Spark示例:https://spark.apache.org/examples.html,例如字数:

val counts = file.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)

但是当我在我的收藏品上尝试类似的东西时,我收到错误:

scala> re.reduceByKey(_ + _)
<console>:13: error: value reduceByKey is not a member of List[(Int, Int)]
              re.reduceByKey(_ + _)
                 ^

如何在元组列表中使用reduce函数?

1 个答案:

答案 0 :(得分:3)

您需要导入隐式方法以从范围内的SparkContext中引入PairRDDFunctions,然后:

import org.apache.spark.SparkContext._

def tuples: RDD[(Int, Int)] = ???

type Sum = Int

val seqOp: (Sum, Int) => Sum = _ + _    
val combOp: (Sum, Sum) => Sum = _ + _

tuples.aggregateByKey(0)(seqOp, combOp)

我添加了类型&#39; Sum&#39;用于明确区分用作键的Int和用作值的Int

在PairRDDFunctions可用后,

reduceByKey也可以使用