Spark-RDD编程之常见转换操作

转换操作能够从已有的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等连接操作

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/79786155