最近我有把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))
答案 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)