文章目录

  • Spark算子
  • Transformation:
  • Action算子:


Spark算子

Transformation:

  • map:返回一个新的RDD,经过一个新的Fun函数转换之后组成
  • RDD=sc.parallelize(rdd) rdd2 = rdd.map(fun)
  • mapPartitions:将数据分区为单位发送到计算节点(减少网络传输,可能造成内存不足)
  • mapPartitionsWithIndex:以分区发送处理并能获得当前分区索引号
  • flatmap:数据扁平化映射处理 返回一个序列(list)
  • glom:将数据转换为相同类型的数组进行处理
  • groupBy:根据指定规则分组,分区默认不变,但是数据会打乱重新组合(shuffle)
  • sample:根据指定的规则从数据集中抽取数
  • rdd.sample(是否放回(True or False),重复抽到数据的期望(0-1),随机数种子)
  • distinct:数据集重复去重 经过 map->reduceBykey->map 过程
  • coalesce:根据数据量缩减分区,收缩合并分区(常用多转少同个stage 窄依赖)
  • reparation:内部函数执行coalesce操作,参数shuffle默认为true,多转少,少转多都可以(必定执行shullfe)
  • sortby : rdd.sortby(fun,升序(false),4) 返回与原分区一致,可能发生shuffle过程
  • intersection:求交集,union:求并集,
  • subtract:求差集,zip:键值对合并,
  • partitionBy:按照指定Partitioner重新分区,默认HashPartitioner
  • reduceByKey:将相同的key对Value进行聚合.
  • 可传入函数rdd.reduceBykey(fun)
  • groupByKey:根据Key对Value进行分组
  • 从shuffle角度来说
  • reduceBykey和groupBykey都存在shuffle过程,
  • reducebykey可以在分区前对相同的key进行预聚合,减少落盘数量
  • groupbykey只是进行分组.
  • 从功能角度来说
  • groupbykey 只能进行分组不能进行聚合
  • reducebykey 则可以进行分组聚合
  • aggregateByKey:根据不同的规则进行分区内计算和分区间计算 分区内是一个函数,分区间是一个函数
  • rdd.(func(分区内),func(分区间))
  • foldbykey:当分区内计算规则和分区间计算规则相同时,aggregatebykey就简化为foldbykey(分区内和分区间逻辑一致)
  • combinebykey:rdd.(func(将数据进行结构转换),func(分区内的计算规则),func(分区间计算规则))
  • filter:返回一个新的RDD,返回经过fun函数计算后返回为True的输入元素

Action算子:

  • reduce:先聚合分区内数据,再聚合分区间数据
  • collect:以数组的形式返回数据集中所有的元素
  • count:返回元素的个数
  • first:返回rdd的第一个元素
  • take:返回Rdd的前N个元素的数组(类似于head -n)
  • takeOrdered:返回排序后的前n个数据的数组
  • aggregate:初始值分区内聚合,再和分区间进行聚合(rdd.aggregate(func(分区内),func(分区间)))
  • fold:aggregate简化版 分区内和分区间操作相同时可用
  • countbykey:统计每种key 的个数
  • save:saveAsTextFile,saveAsObjectFile,saveAsSequenceFile
  • foreach:分布式遍历rdd中的每一个元素,调用指定函数