大数据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博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
相关推荐
GIS数据转换器11 小时前
“一张图”背景下的地质灾害监测预警与防治能力建设
大数据·人工智能·数据分析·无人机·智慧城市
Elastic 中国社区官方博客11 小时前
在 Elastic 中使用 MCP 自动化用户旅程以进行合成监控
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·可用性测试
跨境数据猎手11 小时前
1688 商品铺货到独立站实操(附工具 + 代码)
大数据·爬虫·软件构建
song1502653729811 小时前
【无标题】
大数据
2501_9272835812 小时前
荣联汇智立体仓库:为智慧工厂搭建高效“骨骼”与“中枢”
大数据·运维·人工智能·重构·自动化·制造
NOCSAH12 小时前
统好AI数智平台SRM模块:智能采购管理实操
大数据·人工智能
Ai1731639157912 小时前
10大算力芯片某某XXU全解析:CPU/GPU/TPU/NPU/LPU/FPGA/RPU/BPU/DPU/GPGPU
大数据·图像处理·人工智能·深度学习·计算机视觉·自动驾驶·知识图谱
Bechamz12 小时前
大数据开发学习Day23
大数据·学习·ajax
努力努力再努力FFF12 小时前
律师想了解AI法律咨询工具,能否用它提升案件检索效率?
大数据·人工智能
二十六画生的博客12 小时前
Flink快照保留多久、多少个,设置参数
大数据·flink