Spark的RDD快速合并处理

使用Spark处理数据时,常见的情形时临时的处理数据需要合并处理下游导出。
比如 HBase -> Mysql 转储,或者时 HDFS -> API调用提交。
一般情况下,rdd.foreach( a -> API.commit(a)) 按顺序提交就可以了(这里假设批量接口为API.commit(a[]))。 但是大多数情况batch提交更有效率,怎样对于rdd对元素进行分组和拆分呢?

  1. 使用分区特性操作,可以一定程度避免无意义合并,而且有批量特性。
rdd.foreachPartition(API::commit)
  1. 使用合并操作。这里推荐Guava的工具类
Iterators.partition(a, 1000).forEachRemaining(API::commit)

合并以上方法就是:

rdd.foreachPartition(it -> 
  Iterators.partition(it, batchSize)
           .forEachRemaining(API::commit));

参考
http://spark.apache.org/docs/2.4.0/api/java/org/apache/spark/api/java/JavaRDD.html#foreachPartition-org.apache.spark.api.java.function.VoidFunction-

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容