Spark和Flink当中的常用算子详解

1. Spark中Transformation算子

1.1. map

  • 每个元素都会调用一次map方法
  • 接收一个函数,把这个函数用于 RDD 中的每个元素,将函数的返回结果作为结果RDD 中对应元素的结果

1.2. lookup

  • lookup用于(K,V)类型的RDD,指定K值,返回RDD中该K对应的所有V值

1.3. mapPartitions

  • 每个分区调用一次mapPartitions方法
  • Return a new RDD by applying a function to each partition of this RDD
  • 详细链接

1.4. flatMap

  • 意思大概就是将f这个函数应用到Seq里的所有元素,并将函数产生的集合里的元素取出来,组成一个新的集合。然后返回这个新的集合
  • 详细链接

1.5. mapPartitionsWithIndex

-和mapPartitions功能一致,并且能够获取分区的索引号

1.6. mapPartitionsWithContext

-和mapPartitions功能一致,并且带了上下文参数信息

1.7. combineByKey [pair]

-combineByKey()是最通用的对key-value型rdd进行聚集操作的聚集函数(aggregation function)。类似于aggregate(),combineByKey()允许用户返回值的类型与输入不一致。

1.8. reduceByKey

-reduceByKey底层也是通过combineByKeyWithClassTag来实现的
-combineByKeyWithClassTag的第一个参数默认为(v: V) => v,所以对元素不会产生任何影响
-第二、三两个参数都一样,是reduceByKey传递过来的,将两个值变成一个值(V, V) => V

1.9. groupByKey

-groupByKey底层也是通过combineByKeyWithClassTag来实现的
-groupByKey的返回值为RDD[(K, Iterable[V])],val值是一个迭代器,其内容包含所有key值为K的元祖的value值
-执行过程类似reduceByKey,只是已经帮你写好了每个函数,但是参数mapSideCombine = false,也就意味着,不在map端执行,在reduce端执行

1.10. aggregateByKey

  • aggregateByKey与aggregate类似,都是进行两次聚合,不同的是后者只对分区有效,前者对分区中key进一步细分,底层也是调用的combineByKey
    在这里插入图片描述
  • 详细链接

2. Spark中Action算子

2.1. aggregate

  • 聚合函数,输入和输出类型一致
    在这里插入图片描述
  • 详细链接
  • 注意:
    • val mergeResult = (index: Int, taskResult: U) => jobResult = combOp(jobResult, taskResult)
    • val mergeResult = (index: Int, taskResult: U) =>Unit {jobResult = combOp(jobResult, taskResult)}

3. Spark算子博客链接

4. Flink DataStream Transformations 算子

发布了85 篇原创文章 · 获赞 12 · 访问量 3731

猜你喜欢

转载自blog.csdn.net/fanjianhai/article/details/104331681
今日推荐