spark算子调优二:foreachPartition优化数据库操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37294838/article/details/91406807

在生产环境中,通常使用foreachPartition算子来完成数据库的写入,通过foreachPartition算子的特性,可以优化写数据库的性能

如果使用foreach算子完成数据库的操作,由于foreach算子是遍历RDD的每条数据,因此,每条数据都会建立一个数据库连接,这是对资源的极大浪费,因此,对于写数据库操作,我们应当使用foreachPartition算子。

与mapPartitions算子非常相似,foreachPartition是将RDD的每个分区作为遍历对象,一次处理一个分区的数据,也就是说,如果涉及数据库的相关操作,一个分区的数据只需要创建一次数据库连接,如图所示:

使用了foreachPartition算子后,可以获得以下的性能提升:

1. 对于我们写的function函数,一次处理一整个分区的数据

2. 对于一个分区内的数据,创建唯一的数据库连接

3. 只需要向数据库发送一次SQL语句和多组参数

在生产环境中,全部都会使用foreachPartition算子完成数据库操作。foreachPartition算子存在一个问题,与mapPartitions算子类似,如果一个分区的数据量特别大,可能会造成OOM,即内存溢出。

猜你喜欢

转载自blog.csdn.net/m0_37294838/article/details/91406807
今日推荐