大数据Spark(七十五):Action行动算子foreachpartition和count使用案例

文章目录

Action行动算子foreachpartition和count使用案例

一、foreach

二、foreachpartition

三、count


Action行动算子foreachpartition和count使用案例

Action算子对 RDD 执行计算操作,将结果返回到Driver端或写入外部存储,这些操作会触发实际的计算过程,即:Transformations类算子是延迟执行,Action类算子是触发执行。此外,一个action算子对应一个spark job,一个application中有几个action算子就有几个job。下面对常见的Action算子进行介绍。

一、foreach

循环遍历数据集中的每个元素,运行相应的逻辑,这里不再给出案例。

二、foreachpartition

foreach遍历单位为每条数据,foreachPartition遍历单位是每个分区,可以对每个分区的数据进行批量操作。适用于需要对每个分区的数据进行批量处理的场景,例如在每个分区中建立一次数据库连接,然后对分区内的数据进行批量写入,避免为每个元素建立连接的开销。

Java代码:

java 复制代码
SparkConf conf = new SparkConf().setMaster("local").setAppName("foreachPartitionTest");
JavaSparkContext sc = new JavaSparkContext(conf);

JavaRDD<String> rdd = sc.parallelize(Arrays.asList("a", "b", "c", "d", "e", "f"), 2);

//foreach 遍历每条数据,每条数据都要创建一次数据库连接,效率低
/*rdd.foreach(str->{
    System.out.println("创建数据库连接...");
    System.out.println("插入数据:" + str);
    System.out.println("关闭数据库连接...");
});*/

//foreachPartition 遍历每个分区的数据,每个分区创建一次数据库连接,效率高
rdd.foreachPartition(iter->{
    System.out.println("创建数据库连接...");
    while (iter.hasNext()) {
        String s = iter.next();
        System.out.println("插入数据:" + s);
    }
    System.out.println("关闭数据库连接...");
});

sc.stop();

Scala代码:

Scala 复制代码
val conf: SparkConf = new SparkConf().setMaster("local").setAppName("ForeachPartitionTest")
val sc = new SparkContext(conf)

val rdd: RDD[String] = sc.parallelize(List("a", "b", "c", "d", "e", "f"), 2)

//foreach 遍历每条数据,每条数据都要创建一次数据库连接,效率低
/*rdd.foreach(str=>{
  println("创建数据库连接...")
  println(s"插入数据... $str")
  println("关闭数据库连接...")
})*/

//foreachPartition 遍历每个分区的数据,每个分区创建一次数据库连接,效率高
rdd.foreachPartition(iter=>{
  println("创建数据库连接...")
  while (iter.hasNext){
    val next = iter.next()
    println(s"插入数据... $next")
  }
  println("关闭数据库连接...")
})


sc.stop()

三、count

返回数据集中的元素总数量,会在结果计算完成后回收到Driver端。

案例:统计数据总条数。

Java代码:

java 复制代码
SparkConf conf = new SparkConf().setMaster("local").setAppName("filter");
JavaSparkContext sc = new JavaSparkContext(conf);
//count:统计RDD中元素的个数
long count = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)).count();
System.out.println(count);
sc.stop();

Scala代码:

Scala 复制代码
val conf: SparkConf = new SparkConf().setMaster("local").setAppName("CountTest")
val sc = new SparkContext(conf)

//count: 统计RDD中元素的个数
val count: Long = sc.parallelize(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)).count()
println(count)
sc.stop()

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
相关推荐
龙亘川31 分钟前
电子签章服务与核验业务建模:从在线签署、可信核验到归档追溯的全流程闭环
大数据·人工智能·智慧城市·开源软件
流烟默37 分钟前
ClickHouse 集群建表实战:从引擎选择到本地表 / 分布式表落地
分布式·clickhouse
云表无代码开发6 小时前
雷军救WPS“三次”!WPS注入新生力量,不再抄袭微软
大数据·microsoft
燧机科技SuiJi8 小时前
山体坍塌落石滑坡泥石流监测系统 落石泥石流监控摄像机
大数据·人工智能·深度学习·yolo
AOI小白新手上路10 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
TMT星球11 小时前
工博会2026丨它石智航联合创始人陈同庆:从模型到产线,让机器人在真实场景创造真实价值
大数据·人工智能
2401_8652616313 小时前
亦唐科技:大数据如何驱动精准商业决策
大数据·科技
xiaomuzuirenzhen13 小时前
2027秋招项目复盘:数据科学与大数据技术专业如何从代码实现讲到业务价值
大数据
派小心.14 小时前
网站统计采样数据的误差核对
大数据·服务器·前端·数据库·人工智能·小程序·数据分析
阿里云大数据AI技术15 小时前
在 EMR Serverless Spark 中访问 Fluss
人工智能·spark