1.转换算子:
功能的补充和封装,将旧的RDD包装成新的RDD
2.map():
返回一个新的 RDD,该 RDD 由每一个输入元素经过函数转换后组成(每次处理一条数据)
rdd的计算在分区内是一个一个的执行逻辑,分区内数据执行有序,不同分区执行无序
map将处理的数据逐条进行映射转换,转换可以是类型的转换,也可以是值的转换
3.mapPartitions():
与map类似,可以以分区为单位进行数据转换操作(每次处理一个分区的数据)
处理数据时会将整个分区的数据加载到内存中进行引用(有内存溢出的风险)
4.mapPartitionsWithIndex():
与mapPartitionsWithIndex类似,带有正数参数表示分区的索引值
参数里的函数类型必须是(Int, Interator[T]) => Iterator[U]
5.flatMap():
与map类似,每一个输入的元素都可以被映射为0或者多个输出元素
6.glom():
将一个分区形成一个数组,行成新的RDD类型时,RDD[Array[T]]
7.groupBy():
按照传入函数的返回值进行分组,将相同的key对应的值放入一个迭代器
中间经过shuffle过程:将数据根据制定的规则进行分组,分区默认不变,数据会被打乱重新组合
同一个组的数据在一个分区,但一个分区中可能不止一组,分区与分组没有必然的联系
8.filter():
过滤,返回一个由函数计算后返回值为true的输入元素组成的新的RDD
9.sample():
以指定的随机种子随机抽样出制定数量的数据
第一个参数表示 抽样数据后是否将数据返回 true(放回)、false(丢弃)
第二个参数表示
抽取不放回的场合,数据源中每条数据被抽取的概率
抽取放回的场合,数据源中每条数据被抽取的可能次数
第三个参数表示 抽取数据时的随机算法种子,默认使用系统当前时间作为种子
10.distinct():
对源RDD去重后返回一个新的RDD
11.coalesce():
缩减分区数,用于大数据过滤后,提高小数据集的执行效率
默认情况下会将分区内的数据打乱重组, 可能会产生数据倾斜
解决数据倾斜可以进行shuffle处理,将第二个参数设置为true
12.repartition():
根据分区数重新通过网络随机洗牌所有数据,主要用来扩大分区数
13.sortBy():
在函数对数据处理后按照数据比较结果进行排序,默认为升序,降序设置为 false
14.双value类型:
intersection:交集
union:并集
substract:差集
zip:拉链,将两个RDD组成 Key-Value 类型的RDD
交集、并集、差集要求两个数据源数据类型保持一致
拉链操作:
两个数据源的类型可以不一致
两个数据源的分区数量要一致
两个数据源的分区中的数据量要一致
15.partitionBy():
根据指定的分区规则对数据进行重分区
如果原有的partionRDD与现在的partionRDD一致则不进行分区,否则会产生ShuffleRDD,产生shuffle过程
16.reduceByKey():
相同key的数据进行value数据的聚合操作,两两聚合(在shuffle前有预聚合combine操作)
17.groupByKey():
将数据源中相同key的数据分在一个组,形成对偶元组(直接进行shuffle)
第一个元素是key,第二个元素是value的集合
18.aggregateBykey():
存在柯里化:将原来接受两个参数的函数变成新的接受一个参数的函数的过程
有两个参数列表:
第一个参数列表传递一个参数来表示初始值
第二个参数列表需要超过两个参数:
第一个参数表示分区内计算规则
第二个参数表示分区间计算规则
最终返回数据结果应该和初始值类型保持一致
19.foldByKey():
aggregateByKey的简化操作,分区间和分区内计算规则一致
20.combineByKey():
针对相同key,将value合并成一个集合
有三个参数:
第一个参数表示将相同key的第一个数据进行结构的转换,实现操作
第二个参数表示分区内的计算规则
第三个参数表示分区间的计算规则
21.join():
两个不同数据源的数据,相同key的value会连接在一起形成元组
如果两个数据源中key没有匹配上,数据不会出现在结果中
如果两个数据源中key有多个相同的,则可能出现笛卡尔乘积,数量会呈几何增长,导致性能降低
22.cogroup():
在类型为(K,V)和(K,W)的 RDD 上调用,返回一个(K,(Iterable,Iterable))类型的RDD
将key相同的数据聚合成一个迭代器