Spark编程
Spark行个数
scala> val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
scala> lines.filter(line => line.contains("Spark")).count()
找出文本文件中单行文本所包含的单词数量的最大值
scala> val lines = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt")
scala> lines.map(line => line.split(" ").size).reduce((a,b) => if (a>b) a else b)
scala> val lines = sc.textFile("file:///usr/local/spark/mycode/pairrdd/word.txt")
scala> val pairRDD = lines.flatMap(line => line.split(" ")).map(word => (word,1))
(i,1)
(love,1)
(hadoop,1)
map 每个元素传递到函数中,并将结果返回一个新的数据集
scala> val lines = sc.textFile("data.txt")
scala> val lineLengths = lines.map(s => s.length)
scala> val totalLength = lineLengths.reduce((a, b) => a + b)
mapValues(func)
对键值对RDD中的每个value都应用一个函数,但是,key不会发生变化
scala> pairRDD.mapValues(x => x+1).foreach(println)
输入(Hadoop,1)(Spark,1)(Hive,1)(Spark,1)
(Hadoop,2)
(Spark,2)
(Hive,2)
(Spark,2)
reduceByKey(func)
功能是,使用func函数合并具有相同键的值
a,b对应不同键值对中的value
scala> pairRDD.reduceByKey((a,b)=>a+b).foreach(println)
(Hadoop,1)(Spark,1)(Hive,1)(Spark,1)
(Spark,2)
(Hive,1)
(Hadoop,1)
groupByKey()
功能是,对具有相同键的值进行分组
scala> pairRDD.groupByKey()
对四个键值对("spark",1)、("spark",2)、("hadoop",3)和("hadoop",5)
采用groupByKey()后得到的结果是:("spark",(1,2))和("hadoop",(3,5))
求平均值
题目:给定一组键值对(“spark”,2),(“hadoop”,6),(“hadoop”,4),(“spark”,6),键值对的key表示图书名称,value表示某天图书销量,请计算每个键对应的平均值,也就是计算每种图书的每天平均销量。
mapValues 对键值对RDD中的每个value都应用一个函数,但是,key不会发生变化
reduceByKey(func) 使用func函数合并具有相同键的值
scala> val rdd = sc.parallelize(Array(("spark",2),("hadoop",6),("hadoop",4),("spark",6)))
scala> rdd.mapValues(x => (x,1)).reduceByKey((x,y) => (x._1+y._1,x._2 + y._2)).mapValues(x => (x._1 / x._2)).collect()
res22: Array[(String, Int)] = Array((spark,4), (hadoop,5))
mapValues(x => (x,1)) 使得 (‘spark’, (2,1)) (‘spark’, (6,1))
reduceByKey((x,y) => (x._1+y._1,x._2 + y._2)) 仅对相同key的value进行: (‘spark’, (2+6, 1+1))
mapValues(x => (x._1 / x._2)) 每个value都应用一个函数 (‘spark’, 8 / 2)
sortByKey()和sortBy()
scala> val d1 = sc.parallelize(Array((“c",8),(“b“,25),(“c“,17),(“a“,42),(“b“,4),(“d“,9),(“e“,17),(“c“,2),(“f“,29),(“g“,21),(“b“,9)))
scala> d1.reduceByKey(_+_).sortByKey(false).collect
res2: Array[(String, Int)] = Array((g,21),(f,29),(e,17),(d,9),(c,27),(b,38),(a,42))
scala> val d2 = sc.parallelize(Array((“c",8),(“b“,25),(“c“,17),(“a“,42),(“b“,4),(“d“,9),(“e“,17),(“c“,2),(“f“,29),(“g“,21),(“b“,9)))
scala> d2.reduceByKey(_+_).sortBy(_._2,false).collect
(a,b)=>a+b
res4: Array[(String, Int)] = Array((a,42),(b,38),(f,29),(c,27),(g,21),(e,17),(d,9))