spark转化操作

转化操作

由于spark的惰性计算特性,RDD只有在第一次行动操作中被用到时才会真正进行计算,因此我打算将文章内容分为"转化操作"和"行动操作"两部分,同时因为pair RDD(RDD中的元素是键值对)的部分api较为特殊

Transformer算子概念

RDD的操作算子分为两类:

  • Transformation。用来对RDD进行转化,这个操作时延迟执行的(或者说是 Lazy 的);返回一个新的RDD
  • Action。用来触发RDD的计算;得到相关计算结果 或者 将结果保存的外部系统 中;返回结果int、double、集合(不会返回新的RDD)

每一次 Transformation 操作都会产生新的RDD,供给下一个“转换”使用; 转换得到的RDD是惰性求值的。也就是说,整个转换过程只是记录了转换的轨迹, 并不会发生真正的计算,只有遇到 Action 操作时,才会发生真正的计算,开始从血 缘关系(lineage)源头开始,进行物理的转换操作;

在这里插入图片描述

单RDD转换函数

对数据rdd{1,2,3,3}进行RDD转换

函数举例运行效果解释说明
maprdd.map(x=>x+2){3,4,5,5}对RDD中每一个元素进行操作,对每个元素都+2
flatMaprdd.flatMap(x=>x.to(3)){1,2,3,2,3,3,3}遍历当前每个元素,然后生成从当前元素到3的新RDD集合([当前元素,3]),通常用于切分单词
filterrdd.filter(x=>x!=3){1,2}过滤RDD中不等于3的元素
distinctrdd.distinct(){1,2,3}对RDD去重
samplerdd1.sample(false,0.5)随机随机数生成RDD子数据集

map()函数

val testList = List(1, 2, 3, 3)
val testRdd = sc.parallelize(testList)
testRdd.map(x => x + 2).foreach(x => print(s"$x "))
// 输出:3 4 5 5

多RDD转换函数

对数据rdd1{1,2,3}和rdd2{2,4,6}进行RDD转换

函数举例运行结果解释说明
unionrdd1.union(rdd2){1,2,3,2,4,6}rdd1返回两个RDD的合并,不去重
intersectionrdd1.intersection(rdd2){2}rdd1返回两个RDD的交集,去重
subtractrdd1.subtract(rdd2){1,3}与intersection函数类似,rdd1返回在rdd1中出现,在rdd2中没有出现的元素,不去重(即移除rdd2的内容,通常用于移除训练数据)
cartesianrdd1.cartesian(rdd2){(1,2),(1,4),(1,6),(2,2),(2,4),(2,6),(3,2),(3,4),(3,6)}求笛卡尔积,对两个RDD数据进行笛卡尔计算,返回(T,U)Pair模板类型的RDD数据

unon()函数
相当于集合运算的并集,生成一个包含两个RDD中所有元素的RDD,要求两个RDD的元素类型相同

val testList1 = List(1, 2, 3)
val testList2 = List(2, 4, 6)
val testRdd1 = sc.parallelize(testList1)
val testRdd2 = sc.parallelize(testList2)
testRdd1.union(testRdd2).foreach(ele => print(s"$ele "))
// 输出:1 2 3 2 4 6

map与flatmap

下图说明了map和flatMap的区别,flatMapRDD中是一个个迭代器中的具体元素,但是map中是一个个迭代器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0auc6Ug-1674868515684)(转化操作.assets/image-20210415162443257.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值