spark行动操作

行动操作

在spark当中RDD的操作可以分为两种,一种是转化操作(transformation),另一种是行动操作(action)。在转化操作当中,spark不会为我们计算结果,而是会生成一个新的RDD节点,记录下这个操作。只有在行动操作执行的时候,spark才会从头开始计算整个计算。

而转化操作又可以进一步分为针对元素的转化操作以及针对集合的转化操作。和转化操作API不同的是,行动操作API只能作用于一个RDD。

Action算子概念

Action 用来触发RDD的计算,得到相关计算结果
Action触发Job。一个Spark程序(Driver程序)包含了多少 Action 算子,那么
就有多少Job;
典型的Action算子: collect / count
collect() => sc.runJob() => … => dagScheduler.runJob() => 触发了Job

Action函数

以数据rdd{1,2,3,3}为例,进行RDD转换,如下:

函数举例运行结果解释说明
collectrdd.collect(){1,2,3,3}将RDD数据转换成数组
countrdd.count()4对RDD中元素进行统计
take(num)rdd.take(3){1,2,3}返回RDD中从0到(num-1)下标的元素,不进行排序(结果中返回rdd下标为0,1,2是元素)
top(num)rdd.top(3){3,3,2}对RDD数据,按照默认(降序)或者指定的排列顺序,返回num个元素
takeOrdered(num)rdd.takeOrdered(3){1,2,3}与top函数类似,但是与top顺序相反,按照升序,返回num个元素
takeSamplerdd.takeSample(false,2)随机两个元素组合的新RDD随机生成一个数组包含num个元素的RDD,例如{2,3}或者{1,3}
reducerdd.reduce((x,y)=>x+y)9根据映射函数f=x+y,对RDD中的元素进行加法(其他二元)计算,返回计算结果
fold(zero)(func)rdd.fold(0)((x,y)=>x+y)9将每个元素累加求和,与reduce一样,但是需要提供初始化值
foreachrdd.foreach(print){1,2,3,3}foreach是对每个元素使用的指定函数(例如:print)进行操作
countByValuerdd.countByValue()Map(1 -> 1, 2 -> 1, 3 -> 2)各结果在RDD中出现的次数
aggregate(zeroValue)(seq0p,comb0p)rdd.aggregate((0,0))((x,y) => (x._1 + y,x._2+1),(x,y) => (x._1 + y._1,x._2+y._2))(9,4)aggregate(zeroValue)(seq0p,comb0p) 和reduce类似但是通常返回不同的数据
firstrdd.first1first返回RDD中的第一个元素,不排序

注意aggregate函数中:

  • 第一个函数的作用是把RDD中的元素合并起来放入累加器;
  • 第二个函数的作用是考虑到每个节点是在本地进行累加的,最后还需要提供一个函数将两个累加器进行两两和合并。

collect()函数
返回RDD中的所有元素

val testList = List(1, 2, 3, 3)
val testRdd = sc.parallelize(testList)
testRdd.collect().foreach(ele => print(s"$ele "))
// 输出:1 2 3 3

注意:该函数会将所有元素放入驱动器进程中,只有当整个数据集能在单台机器的内存中放得下时,才能使用,不适宜用在大规模数据集,因此大多数情况下用于本地开发测试,以下还会碰到很多这样不适合大数据量访问的函数

指定顺序排序:

implicit val myOrd = implicitly[Ordering[Int]].reverse
rdd.top(1)
rdd.top(2)

保存 rdd 到 hdfs(saveAsTextFile)

rdd.saveAsTextFile("hdfs://localhost:9000/user/hadoop/Output")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码上行舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值