当前位置: 首页 > news >正文

大数据Spark(六十四):Spark算子介绍

文章目录

Spark算子介绍

一、Transformation-转换算子


Spark算子介绍

在 Apache Spark 中,算子(Operator) 是对分布式数据集(RDD)进行操作的函数或方法。根据功能和特性,Spark 的算子主要分为三大类:转换算子(Transformation)、行动算子(Action) 和 持久化算子(Persistence)。Transformation算子用于从一个 RDD 转换生成另一个 RDD,具有惰性特性;Action算子用于触发实际计算,将结果返回给Driver或写入外部存储;持久化算子用于将 RDD 的数据缓存或持久化,以提高重复计算的效率。

编写Spark代码流程如下:

  • 创建SparkConf对象,Spark Application中必须通过该对象设置Application Name、运行模式,还可以设置Spark applicatiion的资源需求。

  • 创建SparkContext对象,将SparkConf作为参数传入SparkContext对象。

  • 基于SparkContext创建一个RDD,使用Transformation算子对RDD进行转换处理。

  • Spark Application中要有Action类算子来触发Transformation类算子执行。

  • 最终,SparkContext.close()/SparkContext.stop()关闭SparkContext对象。

一、Transformation-转换算子

Transformation算子对现有的RDD进行操作,生成新的 RDD,这些操作是惰性的(延迟执行),只有在遇到Action算子时才会被执行。下面对常用的Transformation类算子进行介绍。

1.map

将一个RDD中的每个数据项,通过map中的函数映射变为一个新的元素,特点:输入一条,输出一条。这里不再给出示例。

2.flatMap

先map后flat。与map类似,每个输入项可以映射为0到多个输出项。这里不再给出示例。

3.reduceByKey

只能作用在K,V格式的RDD上,使用指定的函数对相同Key的Value进行聚合,返回K,V格式的RDD。

4.groupBy

groupBy算子可以对RDD中数据按照指定的规则进行分组。

如下示例将RDD数据按照奇数和偶数进行分组。GroupBy返回Tuple<K,Iterable>,K表示分组的key,V表示该组中的数据。

Java代码:

SparkConf conf = new SparkConf().setMaster("local").setAppName("CustomPartitionerTest");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<Integer> rdd = sc.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));JavaPairRDD<Integer, Iterable<Integer>> result = rdd.groupBy(new Function<Integer, Integer>() {@Overridepublic Integer call(Integer one) throws Exception {return one % 2;}
});result.foreach(new VoidFunction<Tuple2<Integer, Iterable<Integer>>>() {@Overridepublic void call(Tuple2<Integer, Iterable<Integer>> integerIterableTuple2) throws Exception {System.out.println(integerIterableTuple2);}
});sc.stop()

Scala代码:

val conf = new SparkConf().setMaster("local").setAppName("filter")
val sc = new SparkContext(conf)
val rdd: RDD[Int] = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
val result: RDD[(Int, Iterable[Int])] = rdd.groupBy(one => one % 2)
result.foreach(println)
sc.stop()

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨
http://www.dtcms.com/a/426943.html

相关文章:

  • 网页网站设计制作微信推广网站
  • WPF——效果和可视化对象
  • WPF 具有跨线程功能的UI元素
  • 河北众成建设有限公司网站做dw网站图片怎么下载地址
  • PHP基础-函数(第14天)
  • QwertyLearner+cpolar:如何远程提升英文输入效率?
  • 【题解】洛谷 P4081 [USACO17DEC] Standing Out from the Herd P [后缀数组 SA]
  • 论测试驱动开发DD
  • QCustomPlot 性能优化与问题排查
  • 建网站要多少钱用自己的服务器手机网站 图标
  • 需求分析:对原始需求进行加工提炼
  • SFT/DPO/PPO/GRPO训练全解析
  • 海康 智能相机二开 绘制底图+测试工具应用框
  • DIY主机无网络安装PVE全记录:手机热点+笔记本网络共享实战
  • 从“氛围编程“到“氛围研究“:OpenAI的GPT-5与未来自动化研究之路
  • 手动编译 OpenCV 4.1.0 源码,生成 ARM64 动态库 (.so),然后在 Petalinux 中打包使用。
  • 乐从做网站wordpress lover主题
  • 品牌型网站制作有哪些公司自建房设计
  • 知微传感Dkam系列3D相机SDK例程篇:CSharp点云滤波
  • AEO 与 SEO 双引擎:整合策略赢得搜索全域可见性
  • 精读C++20设计模式:行为型设计模式:中介者模式
  • 【C++经典例题】逆波兰表达式求值:栈的经典应用与实现详解
  • mmcv 安装 2025
  • 设计模式(C++)详解——观察者模式(Observer)(2)
  • LeetCode 392 判断子序列
  • 树的存储结构
  • 2025年9月GESP(C++三级):数组清零
  • 怎样查看网站建设时间注册公司需要什么费用
  • Deepoc具身模型外拓板:重塑居家服务机器人的交互革命
  • cpuset v1