题目:给定一组键值对(“spark”,2),(“hadoop”,6),(“hadoop”,4),(“spark”,6),键值对的key表示图书名称,value表示某天图书销量,请计算每个键对应的平均值,也就是计算每种图书的每天平均销量。
很显然,对于上面的题目,结果是很显然的,(“spark”,4),(“hadoop”,5)。
package cn.com.day1
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object Test_05 {
/**
* 题目:给定一组键值对(“spark”,2),(“hadoop”,6),(“hadoop”,4),(“spark”,6),键值对的key表示图书名称,value表示某天图书销量,请计算每个键对应的平均值,也就是计算每种图书的每天平均销量。
* 很显然,对于上面的题目,结果是很显然的,(“spark”,4),(“hadoop”,5)。
*
*/
def main(args: Array[String]) {
val conf = new SparkConf(); //创建SparkConf 对象
conf.setAppName("Wow,my first spark app"); // 设置应用程序的名称,在程序运行的监控面可以看到名称
conf.setMaster("local"); //此时,程序在本地运行,不需要安装Spark集群
val sc = new SparkContext(conf); //创建sparkContext对象,通过sparkConf实例来定制spark运行
val list = Array(("spark", 1), ("spark", 2), ("hadoop", 3), ("hadoop", 5))
var rdd = sc.parallelize(Array(("spark", 2), ("hadoop", 6), ("hadoop", 4), ("spark", 6)))
rdd.mapValues(x => (x, 1)).reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2))
.mapValues(x => (x._1 / x._2)).collect().foreach(println)
}
}
运行结果:
(spark,4)
(hadoop,5)