首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark常用算子实践总结

mapPartitions 与 map 的区别

与 map 方法类似,map 是对 rdd 中的每一个元素进行操作,而 mapPartitions(foreachPartition) 则是对 rdd 中的每个分区的迭代器进行操作。如果在 map 过程中需要频繁创建额外的对象,例如将 rdd 中的数据通过 JDBC 连接写入数据库,map 需要为每个元素创建一个 Connection 链接,开销很大;而 mapPartition 为每个 partition 创建一个 Connection 链接。因此,mapPartitions 效率比 map 高的多。

SparkSql 或 DataFrame 默认会对程序进行 mapPartition 的优化。

foreachPartition和mapPartitions的分别

通过查看 foreachPartition 的源码发现返回值是空,可以看出 foreachPartition 应该属于 Action 运算操作,而 mapPartitions 是转化操作,此外在应用场景上区别是 mapPartitions 可以获取返回值,继续在返回 RDD 上做其他的操作,而 foreachPartition 因为没有返回值并且是 Action 操作,所以使用它一般都是在程序末尾,如:要落地数据到存储系统中如 MySQL,ES,或者 HBase 中,可以用它。

在 Transformation 中也可以落地数据,但是它必须依赖 Action 操作来触发它,因为 Transformation 操作是延迟执行的,如果没有任何 Action 方法来触发,那么 Transformation 操作是不会被执行的,这一点需要注意。

foreachPartition例子

mapPartitions 例子

combineByKey函数详解

计算总成绩的例子

3个重要的函数参数说明:

createCombiner: V => C ,这个函数把当前的值作为参数,此时我们可以对其做些附加操作(类型转换)并把它返回 (这一步类似于初始化操作)

mergeValue: (C, V) => C,该函数把元素V合并到之前的元素C(createCombiner)上 (这个操作在每个分区内进行)

mergeCombiners: (C, C) => C,该函数把2个元素C合并 (这个操作在不同分区间进行)

Hadoop大数据应用

你也能懂大数据

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180518B0UFJK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券