在第一章,已经介绍过了RDDs的基本概念,创建方法和特性。那么在本章将介绍RDD的基本操作方法。如果没看过第一篇的点击链接:Spark之核心—RDDs(1)
顾名思义,Transformation时转换的意思,在RDD中的含义就是从之前的RDD构建一个新的RDD,像map(),filter()等。下面将具体介绍这些操作方法:
val lines2 = lines.map(word => (word,1))
scala> val lines = sc.textFile("../testfile/test")
scala> lines.foreach(println)
Hello Spark!
I love xyj!
I love zyh!
Hello World!
lines的内容如上所示,lines2是对lines这个RDD的操作结果的一个新RDD,我们来看一下结果:
scala> lines2.foreach(println)
(I love xyj!,1)
(I love zyh! ,1)
(Hello Spark!,1)
(Hello World!,1)
即把行数据映射成键值对的形式,由于没有split分词,所以每行就当作一个单词吧。
Action:最终计算出一个结果,形式如count(),save,driver program或者存在文件系统中。
val rdd = sc.parallelize(Array(1,2,3,3))
rdd.reduce((x,y) => x+y)
结果为: 1+2+3+3 = 10
由于key-value型的RDD在spark中应用广泛,所以这部分单独拿出来总结一下。
(jake,80.0)
(jake,90.0)
(jake,85.0)
(mike,85.0)
(mike,92.0)
(mike,90.0)
以上是原始数据,下面定义函数:
combineByKey( score => (1,score); (c1: (Int,Double), newScore) => (c1._1,c1._2+newScore)); (c1:(Int,Double), c2:(Int,Double) => (c1._1+c2._1,c1._2+c2._2))
其中score 为value值,(1,score)中的1表示第一次出现,记为1.Int表示几门课。
2.reduceByKey(func)
eg:{(1,2),(3,4),(3,6)}
rdd.reduceByKey((x,y) => x+y)得到结果:
{(1,2),(3,10)}
3.groupByKey():相同key的分到一个组。
4.mapValues(func):对每个key中的每个value值进行相同操作。
5.flatMapValues:符号化的时候使用。
6.keys(),values()返回key和value值。
7.sortByKey():按照key排序返回RDD