首先介绍下spark算子总共分为2大类:
Transformation 变换/转换算子 和 Action执行算子
Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算。
Transformation
map 可以进行许多操作
filter 过滤算子
flatMap 操作完之后再压平 是map跟flatten的结合使用
groupByKey 根据key分组 不会计算单词数量
reduceByKey(_ + _) 根据key分组 会计算单词数量
Join //连接, (K,V).join(K,W) =>(K,(V,W))
cogroup 协分组 (K,V).cogroup.(k,w) =>(K,CompactBuffer(V,W))
certesian 笛卡儿积
pipe 管线 linux有用 windows有bug
sc.parallelize(Array("/usr/local/spark/bin")).pipe("ls").collect
Coalesce 减少分区
sortByKey 根据key排序 默认升序 后面写false 则降序
val rdd11 = rdd1.coalesce(2) 只能较少分区
val rdd11 = rdd1.repartition(2) 可以减少还可以增加
mapPartitions map端partitions 处理一个区的数据(map处理一行)
Distinct 去重算子 牵扯到 uv pv (详细地址:https://blog.csdn.net/qq_32736999/article/details/83756004)
Action算子
collect() //收集rdd元素形成数组.
count() //统计rdd元素的个数
reduce() //聚合,返回一个值。
first //取出第一个元素take(1)
take //take(3) 取出前3个
saveAsTextFile(path) //保存到文件
saveAsSequenceFile(path) //保存成序列文件
saveAsObjectFile(path) (Java and Scala)
countByKey() //按照key,统计每个key下value的个数
能触发Shuffle的算子是shuffle算子
大概有:去重、排序、聚合、重分区、集合操作和表操作
如:reduceByKey()、join、sortBy、groupByKey、collect、distinct、repatition、Coalesce 等等