做了实验
输入
val rdd = spark.sparkContext.parallelize(Array("x 3y","x y","x y")).map(x=>(x.split(" ")(0),x.split(" ")(1))).reduceByKey((x,y) => x +y).foreach(println)
输出:
(x,3yyy)
可知+是对第二个键值的运算,跟第一个键值对无关。如果第二个键值是字符串,+号是联接操作。如果第二个键值是数字 ,+ 是求和。
reduceByKey(x,y)中的“x”并不是键值对中的第1位,而是第2位。x+y表示两个具有相同key的value值之间的运算。没错,x与y都是变量的别名而已
val rdd = spark.sparkContext.parallelize(Array("1","1","2","3")).map(key=>(key,1)).reduceByKey((value1,value2) => value1+value2).foreach(println)
这样写就豁然开朗,并且也是能执行的。
不要以为键值对就两列数据,第二列可以是符合数据类型。如果第二位是数组,写出来是这样的,千万不要以为x,y代表不同维度,它们都是键值对第二位。
val rdd = spark.sparkContext.parallelize(Array(1,2,2,3)).map(x=>(x,(1,2))).reduceByKey((x,y) =>( x._1+y._1, x._2+y._2)).foreach(println)