Spark 的一些内容
1.函数作用以及返回值类型
foreach
flatMap 返回的迭代器的所有内容构成新的RDD
是一个序列化的数据而不是单个数据项-- a Seq
map
map:对集合中每个元素进行操作。
flatMap:对集合中每个元素进行操作然后再扁平化。
groupByKey():--作用以及返回值类型 --对具有相同键的值进行分组
groupByKey也是对每个key进行操作,但只生成一个sequence
[K, Iterable[V]]
reduceByKey() ---------------------------- 合并具有相同键的值
规约,对具有键相同的值合并起来--返回 各键以及 对应键规约出来的结果值 组成的新的RDD
对大数据进行复杂计算时,reduceByKey优于groupByKey
2.关于分区
01.Spark提供基于分区的map和foreach
mapPartitions foreachPartition
从算子的类型:
foreachPartition应该属于action运算操作,而 mapPartitions 是在Transformation中
返回值上:mapPartitions 返回值类型迭代器: Iterator[U] 该元素的迭代器
应用场景上:
mapPartitions可以获取返回值,继续在返回RDD上做其他的操作
foreachPartition因为没有返回值并且是action操作,所以使用它一般都是在程序末尾比如说要落地数据到存储系统中如mysql,es,或者hbase中,
02.并行度
001.对于已知的RDD进行重分区
002.数据混洗操作中,使用参数的方式为混洗后的RDD指定并行度
重分区:
repartition() 把RDD随机打乱并分成设定的分区数目
coalesce():减少分区--没有打乱
对RDD的分区进行重新划分,repartition内部调用了coalesce,参数shuffle为true
扩大分区
减少分区
coalesce算子,可以手动减少DataFrame的partition数量,并且不用触发shuffle,
这也是coalesce跟repartition的区别
repartition一定会触发shuffle