Spark groupByKey
原创
©著作权归作者所有:来自51CTO博客作者塞上江南o的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
- spark outline
- Spark groupByKey 功能
- 案例演示
spark outline
大纲目录
Spark groupByKey 功能
按照Key重新分组
案例演示
需求:将相同key对应值聚合到一个seq中,并计算相同key对应值的相加结果
package com.xcu.bigdata.spark.core.pg02_rdd.pg022_rdd_transform
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/**
* @Desc : 按照Key重新分组
*/
object Spark14_GroupByKey {
def main(args: Array[String]): Unit = {
//创建配置文件
val conf: SparkConf = new SparkConf().setAppName("Spark14_GroupByKey").setMaster("local[*]")
//创建SparkContext,该对象是提交的入口
val sc = new SparkContext(conf)
//创建RDD
val rdd: RDD[(String, Int)] = sc.makeRDD(List(("a", 1), ("b", 5), ("a", 5), ("b", 2)))
//先来回顾一下groupBy
//指定key,然后进新分组
val resRDD: RDD[(String, Iterable[(String, Int)])] = rdd.groupBy((x: (String, Int)) => x._1)
//打印输出
resRDD.collect().foreach(println)
//输出结果
//(a,CompactBuffer((a,1), (a,5)))
println("***************************************")
//groupByKey 使用
val groupByKeyRDD: RDD[(String, Iterable[Int])] = rdd.groupByKey()
val resRDD1: RDD[(String, Int)] = groupByKeyRDD.map {
case (key, datas) => {
(key, datas.sum)
}
}
//打印输出
resRDD1.collect().foreach(println)
/*
(a,6)
(b,7)
*/
//释放资源
sc.stop()
}
}