转换操作能够从已有的RDD得到新的RDD
一:一元转换操作
1:map
首先创建rdd1,其中含有整数1~9;对rdd1中的每个元素执行乘2操作,得到新的元素rdd2
scala>val rdd1=sc.parallelize(1 to 9 ,3)
scala>val rdd2=sc.rdd1.map(x >= x*2)
scala>rdd1.collect
scala>rdd2.collect
res0:Array[Int] = Array(1,2,3,4,5,6,7,8,9)
res1:Array[Int] = Array(2,4,6,8,10,12,14,16,18)
2:mapValues
mapValues适用于Key-Value对形式的RDD
scala>val rdd1=sc.parallelize(List("dog","tiger","lion","cat","panther","eagle"))
scala>val rdd2=rdd1.map(x >= (x.length,x)).collect
scala>rdd2.mapValues("x"+_+"x").collect
res1:Array[(Int,String)]=Array((3,xdogx),(5,xtigerx),(4,xlionx),(3,xcatx),(7,xpantherx),(5,xeaglex))
3:mapPartitons
mapPartitions是map的一个变形。map的输入函数是作用于RDD中的每个元素,而mapPartitions的输入函数是作用于每个分区
4:flatMap
flatMap与map类似,针对RDD中的每个元素,经过指定的函数(一对多映射)运算后生成若干个新元素,所有新元素构成新RDD
scala>val rdd1=sc.parallelize(1 to 4, 2)
scala>rdd1.flatMap(x => 1 to x).collect
res0:Array[Int] =Array(1,1,2,1,2,3,1,2,3,4)
5:flatMapValues
flatMapValues类似于mapValues,适用于Key-Value对形式的RDD。对于每个Key-Value对中的Value值进行指定的函数运算,但是不同之处在于每个Value值可能被映射为若干新值(不再是一对一映射),然后这些新值再与原Key组成一系列新的Key-Value对,所有新的Key-Value对构成新RDD
6:groupByKey
groupByKey针对Key-Value对形式的RDD,以Key值作为依据,对Value值进行分组
7:sortByKey
sortByKey针对Key-Value对形式的RDD,以Key值作为依据进行排序
8:reduceByKey
reduceByKey针对Key-Value形式的RDD,对具有相同的Key的Value进行指定的函数运算,再将计算结果与Key值组成一个新的Key-Value对,所有新的Key-Value对构成新的RDD
9:filter
filter针对RDD中的每一个元素进行指定的函数运算,对于返回值为true的元素,筛选出来作为新的RDD中的元素。需要注意,filter中函数参数的返回值类型必须是布尔型。
二:二元转换操作
1:union
union操作是将两个RDD中的元素进行合并,将结果封装成新的RDD,类似于两个集合的并运算(不会去重叠)
2:intersection
intersection操作接收另一个RDD作为参数,返回两个RDD中相同的元素并封装成新的RDD,相当于两个集合的交运算
3:subtract
subtract操作接收另一个RDD作为参数,返回由只存在于第一个RDD中而不存在于第二个RDD中的所有元素组成的新RDD,相当于两个集合的差运算
4:join
join针对Key-Value对形式的两个RDD进行连接操作,连接的依据是Key值,其功能与关系型数据库中表的内连接操作相同。类似地,Spark还提供了leftOuterJoin、rightOuterJoin等连接操作