1)函数签名
def reduceByKey(func:(V,V)=>V):RDD[(K,V)]
def reduceByKey(func:(V,V)=>V,numPartitions:Int):RDD[(K,V)]
2)功能说明:该操作可以将RDD[K,V]中的元素按照相同的K对V进行聚合。其存在多种重载形式,还可以设置新RDD的分区数。
3)需求说明:统计单词出现的次数
4)代码实现
package com.huc.Spark1.KeyAndValue
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Test01_reduceByKey {
def main(args: Array[String]): Unit = {
//1.创建SparkConf并设置App名称
val conf: SparkConf = new SparkConf().setAppName("SparkCore").setMaster("local[*]")
//2.创建SparkContext,该对象是提交Spark App的入口
val sc: SparkContext = new SparkContext(conf)
//3.使用Scala进行spark编程
//3.1 创建第一个RDD
val rdd = sc.makeRDD(List(("a", 1), ("b", 5), ("a", 5), ("b", 2)))
//3.2 计算相同key对应值的相加结果
val value: RDD[(String, Int)] = rdd.reduceByKey(_ + _)
value.collect().foreach(println)
//4.关闭连接
sc.stop()
}
}
package com.huc.Spark.KeyAndValue
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object Test02_reduceByKey {
def main(args: Array[String]): Unit = {
//1.创建SparkConf并设置App名称
val conf: SparkConf = new SparkConf().setAppName("SparkCore").setMaster("local[*]")
//2.创建SparkContext,该对象是提交Spark App的入口
val sc: SparkContext = new SparkContext(conf)
//3.使用Scala进行spark编程
// 创建RDD
val rdd: RDD[(String, Int)] = sc.makeRDD(List(("a", 1), ("b", 5), ("a", 5), ("b", 2)))
// 计算相同key对应值的相加结果
val value: RDD[(String, Int)] = rdd.reduceByKey((v1, v2) => v1 + v2)
// 打印结果
println(value.collect().mkString(","))
//4.关闭连接
sc.stop()
}
}