Spark算子


前言

本章节主要介绍Spark core,Spark SQL以及Spark Streaming的常见算子。


RDD的操作算子分为两类,

一、Spark Core中Value类型常见算子

RDD的操作算子分为两类:
Transformation:用来对RDD进行转化,这个操作时延迟执行的(或者说是 Lazy 的);
Action:用来触发RDD的计算;得到相关计算结果或者将结果保存的外部系统中;

1.1常见Transformation算子

1.map(func):对数据集中的每个元素都使用func,然后返回一个新的RDD。
2.filter(func):对数据集中的每个元素使用func,然后返回一个包含使用func为true的元素构成的RDD
3.flapMap(func):与map类似,每个输入元素被映射为0个或多个输出元素
4.mapPartitons(func):和map很像,但map将func作用在每个元素上,而mapPartitons是func作用在每个分区上。
5.groupBy(func):按照传入函数的返回值进行分组,将K相同的值放入一个迭代器。
6.glom:将每一个分区形成一个数组,形成新的RDD[Array[T]].
7.sample(withReplacement,fraction,seed):采样算子。以指定的随机种子(seed)随机抽样出数量为fraction的数据,withReplacement表示是抽出的数据是否放回,true为有放回的抽样,false为无放回的抽样
8.distinct([numTasks]):对RDD去重,返回一个新的RDD,对RDD元素去重后,返回一个新的RDD。可传入numTasks参数改变RDD分区数。
9.coalesce(numPartitions):缩减分区数,无shuffle。
10.repartition(numPartitions):增加或减少分区数,有shuffle。
11.sortBy(func,[ascending],[numTasks]):使用func对数据进行处理,对处理后的结果进行排序。
12.intersection(otherRDD):两个RDD做交集。
13.union(otherRDD):两个RDD做并集。
14.subtract(otherRDD):两个RDD做差。
15.cache():存储当前RDD状态,保存在内存。
15.persist():存储当前RDD的状态,有多种存储模式
宽依赖的算子:groupBy,distinct,repartition,sortBy,intersection,subtract

1.2常见Action算子

1.collect():将Excutor中的数据收集到Driver端。
2.count():统计RDD里有多少条数据
3.first():返回RDD中第一个数据
4.take(n):返回RDD中的前n个元素
5.top(n):按照默认(降序)或者指定的排序规则,返回钱n个元素。
6.foreach(func)/forreachPartition(func):与map/mapPartition对RDD中的每一元素作用一遍,输出RDD中的每个元素。
7.saveAsTextFile(path)/saveAsSequeueFile(path)/saveAsObjectFile(path):将RDD存成文件

二、Spark Core中Key-Value类型常见算子

RDD整体上分为 Value 类型和 Key-Value 类型。前面介绍的是 Value 类型的RDD的操作,实际使用更多的是 key-value 类型的RDD,也称为 PairRDD

2.1常见Transformation算子

1.类似map操作
1.mapValues(func):对数据集中的每个Value使用func,返回一个新的RDD。
2.flatMapValues(func):对数据集中的每个value使用func,进行压平(展开)操作,返回一个新的RDD。
3.keys:取出数据集中多有的key。
4.values:取出数据集中所有的value。
2.聚合操作
1.groupByKey():对数据集中相同的Key进行分组,value进行聚合操作
2.reduceByKey():对数据集中相同的Key进行分组,value进行聚合操作,与groupByKey不同,有map端的combiner
3.foldByKey():对数据集中相同的Key进行分组,value进行聚合操作,可以赋初值。
4.rdd.aggregateByKey(n, seqFunc, combFunc) 其中第一个函数是初始值
n代表每次分完组之后的每个组的初始值,seqFunc代表combine的聚合逻辑,每一个mapTask的结果的聚合成为combine,combFunc reduce端汇总聚合的逻辑
3.排序操作
1.sortByKey:sortByKey函数作用于PairRDD,对Key进行排序。
4.join操作
1.cogroup():类似于全外连接,value数据装载载compactBuffer集合中。
2.join():等值连接
3.leftOutjoin():左外连接
4.fullOuterjoin():全外连接。

2.常见Action算子

1.collectAsMap():将(K,Value)的RDD转化为Map集合。
2.countByKey():将相同的key进行分组,value值相加。
3.lookup(key):高效的查找方法,之查找对应分区的数据(如果RDD有分区的话).

三.Spark SQL中的算子

3.1常见的Transformation操作

1.与RDD类似的操作
(1)map,filter,flatMap,mapPartitions,sample
(2)randomSplit():
(3)limit(n):取数据的前n行
(4)distinct():对数据去重
(5)dropDuplicates("str1"str2“,…,“strn”):按列值进行去重
(6)describe(“str”):返回指定列的统计
2.与储存相关的操作
(1)cacheTable(),persist(),checkpoint(),unpersist(),cache()
3.与select相关
(1)列的多种表示方法:“column”,$“column”,’,col(column),ds(“column”),其中column为列名,在某些情况下以上列名有的不生效。
(2)select():查询语句
(3)drop():删除一个或多个列,得到新的DF。
(4)withColumn():修改列值
(5)withColumnRenamed():更改列名。
(6)cast():类型转换。
4.与groupBy相关
groupBy,agg,max,min,sum,count
5.与join相关
(1)crossJoin():笛卡尔积
(2)join():等值连接
6.集合相关
集合的交、并、差:union、intersect、except

3.2常见的Action算子

1.与RDD类似的操作
show、collect、collectAsList、head、first、count、take、takeAsList、reduce
2.与结构相关
printSchema、explain、columns、dtypes、col

四.Spark Streaming常见的操作

4.1无状态转换

状态转化操作就是把简单的 RDD 转化操作应用到每个批次上,也就是转化DStream 中的每一个 RDD。
常见的无状态转换包括:map,flatMap,filter,repartition,reduceByKey,groupByKey,这些算子直接作用在DStream上。
重要的转换操作:transform。通过对源DStream的每个RDD应用RDD-RDD函数,创建一个新的DStream,支持在新的DSream中做任何RDD操作。

4.2有状态操作

1.窗口操作
Window Operations可以设置窗口大小和滑动窗口间隔来动态的获取当前Streaming的状态。基于窗口的操作会在一个比 StreamingContext 的 batchDuration(批次间隔)更长的时间范围内,通过整合多个批次的结果,计算出整个窗口的结果。
2.updateStateByKey
UpdateStateByKey的主要功能:
为Streaming中每一个Key维护一份state状态,state类型可以是任意类型的,可以是自定义对象;更新函数也可以是自定义的通过更新函数对该key的状态不断更新,对于每个新的batch而言,SparkStreaming会在使用updateStateByKey 的时候为已经存在的key进行state的状态更新使用 updateStateByKey 时要开启 checkpoint 功能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值