在大数据处理领域,Spark Core是极为重要的框架,而其中的算子则是数据处理的核心武器。今天就来给大家讲讲Spark Core编程中的各类算子。
Value类型算子是基础。像 map 算子,它能逐条对数据进行映射转换,比如把数据集中的每个数字都乘以2。 mapPartitions 则是以分区为单位处理数据,相比 map 是批处理操作,性能更高,但可能占用较多内存。 flatMap 不仅能映射,还会把数据扁平化,处理嵌套数据时很有用。 filter 用来筛选数据,保留符合规则的,丢弃不符合的 。 groupBy 可以根据指定规则分组数据,不过要注意可能会引发shuffle操作。 sample 能按特定规则从数据集抽取数据,有放回或无放回抽取。 distinct 用于去除重复数据, coalesce 和 repartition 可调整分区,提升数据处理效率。
双Value类型算子主要处理两个RDD。 intersection 求两个RDD的交集, union 求并集且不去重, subtract 以源RDD为主求差集, zip 能将两个RDD按位置合并成键值对。
Key - Value类型算子聚焦键值对数据。 partitionBy 按指定Partitioner重新分区,默认是HashPartitioner。 groupByKey 按key分组value, reduceByKey 能聚合相同key的value ,相比 groupByKey ,它在shuffle前有预聚合功能,性能更好。 aggregateByKey 和 foldByKey 用于复杂聚合, combineByKey 则更为通用。 sortByKey 按key排序, join 、 leftOuterJoin 和 cogroup 用于连接不同RDD,功能类似SQL中的连接操作。