Spark之RDD转换算子(transformation)大全

本文详细介绍了 Spark 中的转换算子,包括 map、filter、distinct、reduceByKey、groupByKey、sortByKey等,这些算子在遇到动作算子时才进行计算。文章通过案例展示了每个算子的使用方式和作用,帮助读者理解Spark RDD的转换操作。
摘要由CSDN通过智能技术生成

前面已经给大家讲过RDD原理,今天就给大家说说RDD的转换算子有哪些,以便大家理解。
对于转换操作,RDD的所有转换都不会直接计算结果,仅记录作用于RDD上的操作,当遇到动作算子(Action)时才会进行真正计算,理解了转换算子的用途,那么接下来就不能理解哪些是转换算子了,通俗的说只要没有经过聚合或计算的算子,都可以当作转换算子。

常用转换算子

map

  • 对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD
  • 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应
  • 输入分区与输出分区一一对应

案例1:

val a=sc.parallelize(1 to 9)
val b=a.map(x=>x*2)
a.collect
b.collect

解析:将原RDD中每个元素都乘以2来产生一个新的RDD

案例2:

val a=sc.parallelize(List("dog","tiger","pig","cat"))
val b=a.map(x=>(x,1))
b.collect

解析:map把普通RDD变成PairRDD

filter

  • 对元素进行过滤,对每个元素应用指定函数,返回值为true的元素保留在新的RDD中

案例:

val a=sc.parallelize(1 to 10)
a.filter(_%2==0).collect      
a.filter(_<4).collect 
//map&filter
val rdd=sc.parallelize(List(1 to 6))
val mapRdd=rdd.map(_*2)
mapRdd.collect
val filterRdd=mapRdd.filter(_>5)
filterRdd.collect

mapValues

  • 原RDD中的Key保持不变,与新的Value一起组成新的RDD中的元素,仅适用于PairRDD

案例:

val a=sc.parallelize(List("dog","tiger","lion","cat","panther","eagle"))
val b=a.map(x=>(x.length,x))
b.mapValues("x"+_+"x").collect

//输出结果:
Array((3,xdogx), (5,xtigerx), (4,xlionx), (3,xcatx), (7,xpantherx), (5,xeaglex))
 

distinct

  • 将当前RDD进行去重后,返回一个新的RDD

案例:

val dis = sc.parallelize(List(1,2,3,4,5,6,9,9,2,6))
dis.distinct.collect

//1,2,3,4,5,6,9

reduceByKey(func: (x, y) => v)

  • 根据Key值将相同Key的元组的值用func进行计算,返回新的RDD

案例:

val a = sc.parallelize(List("dog", "salmon", "pig"), 3)
val f = a.map(x=>(x.length,x))
f.reduceByKey((a,b)=>(a+b)).collect
或
f.reduceByKey(_+_).collect

//Array[(Int, String)] = Array((6,salmon), (3,dogpig))

groupByKey(): RDD[(K, Iterable[V])]

  • 将相同Key的值进行聚集,输出一个(K, Iterable[V])类型的RDD

案例:

val a = sc.<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值