reduceByKey是什么意思(_ ++ _)

时间:2017-05-23 05:14:22

标签: scala apache-spark

最近我有把keyValue对中存储数据的方案,并遇到了一个函数reduceByKey(_ ++ _)。这更像是速记语法。我无法理解这实际意味着什么。

例如:reduceBykey(_ + _)表示reduceByKey((a,b)=>(a+b))

所以reduceByKey(_ ++ _)意味着??

我可以使用reduceByKey(_ ++ _)从数据中创建键值对。

val y = sc.textFile("file:///root/My_Spark_learning/reduced.txt")

y.map(value=>value.split(","))
  .map(value=>(value(0),value(1),value(2)))
  .collect
  .foreach(println)

(1,2,3)
(1,3,4)
(4,5,6)
(7,8,9)

y.map(value=>value.split(","))
  .map(value=>(value(0),Seq(value(1),value(2))))
  .reduceByKey(_ ++ _)
  .collect
  .foreach(println)

(1,List(2, 3, 3, 4))
(4,List(5, 6))
(7,List(8, 9))

2 个答案:

答案 0 :(得分:6)

reduceByKey(_ ++ _)转换为reduceByKey((a,b) => a ++ b)

++是在List上定义的method,它将另一个列表连接到它。

因此,对于示例数据中的键1,a将为List(2,3)b将为List(3,4),因此List(2,3)和{List(3,4)的串联{1}}(List(2,3) ++ List(3,4))会产生List(2,3,3,4)

答案 1 :(得分:1)

reduceByKey(_ ++ _)相当于reduceByKey((x,y)=> x ++ y) reduceByKey接受两个参数,应用函数并返回

首先它创建了一个集合,++只是将集合添加到一起,组合了两个集合的元素。

对于每个键,它会一直追加到列表中。在您的情况下,1为关键字x为List(2,3),y为List (3,4)++List (2,3,3,4)

如果您有其他值(1,4,5),则在这种情况下x将为List(4,5),y应为List (2,3,3,4),结果为List(2,3,3,4,4,5)

相关问题