`Value`:map mapPartitions mapPartitionsWithIndex flatMap glom groupBy filter sample
coalesce repartition sortBy
`双Value`: intersection union subtract zip
`Key-Value`: partitionBy reduceByKey groupByKey aggregateByKey foldByKey combineByKey
`sortByKey` join leftOuterJoin `cogroup`
`行动算子`:reduce collect count first take takeOrdered aggregate fold countByKey
save相关的算子 saveAsTextFile saveAsObjectFile saveAsSequenceFile foreach
spark中,shuffle操作必须落盘处理,否则可能导致内存溢出,所有shuffle性能非常低
val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparkConf)
map
mapPartitionsWithIndex:在处理的同时可以获得当前分区索引
- 只保留第二个分区的数据
flatMap:扁平映射
- 将
List(List(1,2),3,List(4,5))进行扁平化映射
glom()
- 返回值
RDD[Array[T]] - 将同一个分区的数据直接转换为相同类型的内存数组进行处理,分区不变
小功能:计算所有分区最大值求和(分区内取最大值,分区间最大值求和)
groupBy
- groupBy(
分组规则)
输出结果:有两个分组
相同的字母放到同一个分组
输出结果
fliter
- 筛选后,分区不变,生产环境下,过滤之后可能产生
数据倾斜 - fliter(
要)
sample
根据指定的规则从数据集中抽取数据
distinct:去重
coalesce:缩减分区
coalesce:不会将数据打乱重新组合,相同分区的数据只能放到同一个分区- 可能会出现
数据倾斜 - 把第二个参数设置为
true,可进行shuffle,默认为false
扩大分区(不建议使用)
必须要使用shuffle,否则不起作用
不进行shuffle
repartition:扩大分区
sortBy(排序规则,false降序:默认升序)
String按照字典序排序- 存在
shuffle操作
双value操作:交集|并集|差集|拉链
交集:intersection
并集:union:并集不去重
差集:subtract
拉链:zip,将相同位置上的数据拉到一块
交集|并集|差集数据类型必须相同,而拉链可以拉取数据类型不相同的数据源
拉链的两个数据源分区数量必须要一致每个分区数量必须相同 => 数据源里数据量相同
K-V类型
partitionBy
reduceByKey:两两聚合
aggregateByKey
aggregateByKey的返回值类型由初始值决定的- aggregate(
传入的类型决定最终的返回类型)( )
join
cogroup
- 将来自不同数据源的相同key的数据合并成
集合 - 匹配不到的key也会输出
- 使用
CompactBuffer集合存储两个RDD中的数据