spark的算子

news2024/9/22 5:28:16

spark的算子

在这里插入图片描述

1.spark的单Value算子

Spark中的单Value算子是指对一个RDD中的每个元素进行操作,并返回一个新的RDD。下面详细介绍一些常用的单Value算子及其功能:

  1. map:逐条映射,将RDD中的每个元素通过指定的函数转换成另一个值,最终返回一个新的RDD。
rdd = sc.parallelize([1, 2, 3, 4, 5])
result = rdd.map(lambda x: x * 2)
# result: [2, 4, 6, 8, 10]
  1. flatMap: 扁平化映射,将RDD中的每个元素通过指定的函数转换成多个值,并将这些值展开为一个新的RDD。
rdd = sc.parallelize([1, 2, 3, 4, 5])
result = rdd.flatMap(lambda x: range(x, x+3))
# result: [1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5, 6, 5, 6, 7]
  1. glom:将一个分区中的多个单条数据转换为相同类型的单个数组进行处理。返回一个新的RDD,其中每个元素是一个数组。
rdd = sc.parallelize([1, 2, 3, 4, 5], 2)  # 两个分区
result = rdd.glom().collect()
# result: [[1, 2], [3, 4, 5]]
  1. groupBy: 将RDD中的元素按照指定条件分组,返回一个键值对RDD,其中的每个元素是一个(key, iterator)对,key为分组的条件,iterator为对应分组的元素迭代器。
rdd = sc.parallelize(['apple', 'banana', 'cherry', 'date'])
result = rdd.groupBy(lambda x: x[0])
# result: [('a', ['apple']), ('b', ['banana']), ('c', ['cherry']), ('d', ['date'])]
  1. filter:根据指定的规则过滤出符合条件的元素,返回一个新的RDD。
rdd = sc.parallelize([1, 2, 3, 4, 5])
result = rdd.filter(lambda x: x % 2 == 0)
# result: [2, 4]
  1. sample:从RDD中进行采样,返回一个包含采样结果的新的RDD。
rdd = sc.parallelize(range(10))
result = rdd.sample(False, 0.5)
# result: [0, 2, 3, 4, 5, 7]
  1. distinct(shuffle):去重,将RDD中重复的元素去除,返回一个由不重复元素组成的新的RDD。
rdd = sc.parallelize([1, 2, 2, 3, 3, 3])
result = rdd.distinct()
# result: [1, 2, 3]
  1. coalesce(shuffle):缩减分区,将RDD的分区数缩减为指定的数量。
rdd = sc.parallelize([1, 2, 3, 4, 5], 4)  # 4个分区
result = rdd.coalesce(2)
# result: [1, 2, 3, 4, 5](分区数变为2)
  1. repartition(shuffle):扩增分区数,底层是coalesce。将RDD的分区数扩增到指定的数量。
rdd = sc.parallelize([1, 2, 3, 4, 5], 2)  # 2个分区
result = rdd.repartition(4)
# result: [1, 2], [3, 4], [5](分区数变为4)
  1. sortBy(shuffle):根据指定的规则对数据源中的数据进行排序,默认为升序。
rdd = sc.parallelize([3, 1, 4, 2, 5])
result = rdd.sortBy(lambda x: x)
# result: [1, 2, 3, 4, 5]

这些单Value算子能够对RDD中的每个元素进行处理,并返回一个新的RDD,可以用于各种数据转换、过滤、去重等操作。

2. Spark的双Value算子

双Value算子是指对两个RDD进行操作,并返回一个新的RDD。下面介绍一些常用的双Value算子及其功能:

  1. union: 对两个RDD求并集,返回包含两个RDD中所有元素的新RDD。
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize([3, 4, 5])
result = rdd1.union(rdd2)
# result: [1, 2, 3, 3, 4, 5]
  1. intersection: 对两个RDD求交集,返回包含两个RDD中共有元素的新RDD。
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize([3, 4, 5])
result = rdd1.intersection(rdd2)
# result: [3]
  1. subtract: 对两个RDD求差集,返回只属于第一个RDD而不属于第二个RDD的元素的新RDD。
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize([3, 4, 5])
result = rdd1.subtract(rdd2)
# result: [1, 2]
  1. cartesian: 对两个RDD进行笛卡尔积操作,返回所有可能的元素对组成的新RDD。
rdd1 = sc.parallelize([1, 2])
rdd2 = sc.parallelize(['a', 'b'])
result = rdd1.cartesian(rdd2)
# result: [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
  1. zip: 将两个RDD的元素按照索引位置进行配对,返回键值对组成的新RDD。
rdd1 = sc.parallelize([1, 2, 3])
rdd2 = sc.parallelize(['a', 'b', 'c'])
result = rdd1.zip(rdd2)
# result: [(1, 'a'), (2, 'b'), (3, 'c')]
  1. join: 对两个键值对RDD进行内连接操作,返回具有相同键的元素对组成的新RDD。
rdd1 = sc.parallelize([(1, 'apple'), (2, 'banana')])
rdd2 = sc.parallelize([(1, 'red'), (2, 'yellow')])
result = rdd1.join(rdd2)
# result: [(1, ('apple', 'red')), (2, ('banana', 'yellow'))]
  1. leftOuterJoin: 对两个键值对RDD进行左外连接操作,返回左侧RDD中所有元素以及与之匹配的右侧RDD中的元素对组成的新RDD。
rdd1 = sc.parallelize([(1, 'apple'), (2, 'banana')])
rdd2 = sc.parallelize([(1, 'red'), (3, 'yellow')])
result = rdd1.leftOuterJoin(rdd2)
# result: [(1, ('apple', 'red')), (2, ('banana', None))]
  1. rightOuterJoin: 对两个键值对RDD进行右外连接操作,返回右侧RDD中所有元素以及与之匹配的左侧RDD中的元素对组成的新RDD。
rdd1 = sc.parallelize([(1, 'apple'), (2, 'banana')])
rdd2 = sc.parallelize([(1, 'red'), (3, 'yellow')])
result = rdd1.rightOuterJoin(rdd2)
# result: [(1, ('apple', 'red')), (3, (None, 'yellow'))]

这些双Value算子能够对两个RDD进行操作,并返回一个新的RDD,可以用于求并集、交集、差集等操作,也可以进行连接操作,根据键值对进行配对。

3. Spark的Key-Value算子

Key-Value算子是指对键值对RDD进行操作的算子,这些算子主要用于处理具有键值对结构的数据,其中键位于第一列,值位于第二列。下面介绍一些常用的Key-Value算子及其功能:

  1. reduceByKey: 对具有相同键的元素进行聚合操作,返回一个新的键值对RDD。
rdd = sc.parallelize([(1, 2), (1, 3), (2, 4), (2, 5)])
result = rdd.reduceByKey(lambda x, y: x + y)
# result: [(1, 5), (2, 9)]
  1. groupByKey: 对具有相同键的元素进行分组操作,返回一个新的键值对RDD。
rdd = sc.parallelize([(1, 2), (1, 3), (2, 4), (2, 5)])
result = rdd.groupByKey()
# result: [(1, <pyspark.resultiterable.ResultIterable object at 0x7f3128a3e370>), (2, <pyspark.resultiterable.ResultIterable object at 0x7f3128a3e3d0>)]
  1. sortByKey: 按照键的顺序对RDD进行排序操作,默认升序排列。
rdd = sc.parallelize([(3, 'apple'), (1, 'banana'), (2, 'orange')])
result = rdd.sortByKey()
# result: [(1, 'banana'), (2, 'orange'), (3, 'apple')]
  1. mapValues: 对键值对RDD中的值进行操作,返回一个新的键值对RDD。
rdd = sc.parallelize([(1, 'apple'), (2, 'banana')])
result = rdd.mapValues(lambda x: 'fruit ' + x)
# result: [(1, 'fruit apple'), (2, 'fruit banana')]
  1. flatMapValues: 对键值对RDD中的值进行扁平化操作,返回一个新的键值对RDD。
rdd = sc.parallelize([(1, 'hello world'), (2, 'goodbye')])
result = rdd.flatMapValues(lambda x: x.split())
# result: [(1, 'hello'), (1, 'world'), (2, 'goodbye')]
  1. keys: 返回所有键组成的一个新的RDD。
rdd = sc.parallelize([(1, 'apple'), (2, 'banana')])
result = rdd.keys()
# result: [1, 2]
  1. values: 返回所有值组成的一个新的RDD。
rdd = sc.parallelize([(1, 'apple'), (2, 'banana')])
result = rdd.values()
# result: ['apple', 'banana']

除了上述提到的常用Key-Value算子,还有一些其他常见的Key-Value算子,它们在处理键值对RDD时也非常有用。以下是其中几个:

  1. countByKey: 统计每个键出现的次数,返回一个字典。
rdd = sc.parallelize([(1, 'apple'), (1, 'banana'), (2, 'orange'), (2, 'banana')])
result = rdd.countByKey()
# result: {1: 2, 2: 2}
  1. collectAsMap: 将键值对RDD转换为字典形式。
rdd = sc.parallelize([(1, 'apple'), (2, 'banana')])
result = rdd.collectAsMap()
# result: {1: 'apple', 2: 'banana'}
  1. lookup: 查找具有给定键的所有值,并返回一个列表。
rdd = sc.parallelize([(1, 'apple'), (2, 'banana'), (1, 'orange')])
result = rdd.lookup(1)
# result: ['apple', 'orange']
  1. foldByKey: 对具有相同键的元素进行折叠操作,类似于reduceByKey,但可以指定初始值。
rdd = sc.parallelize([(1, 2), (1, 3), (2, 4), (2, 5)])
result = rdd.foldByKey(0, lambda x, y: x + y)
# result: [(1, 5), (2, 9)]
  1. aggregateByKey: 对具有相同键的元素进行聚合操作,可以指定初始值和两个函数:一个用于局部聚合,另一个用于全局聚合。
rdd = sc.parallelize([(1, 2), (1, 3), (2, 4), (2, 5)])
result = rdd.aggregateByKey(0, lambda x, y: x + y, lambda x, y: x + y)
# result: [(1, 5), (2, 9)]

这些Key-Value算子能够对键值对RDD进行操作,实现聚合、分组、排序、映射等功能。使用这些算子可以更方便地处理具有键值对结构的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1245096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

009 OpenCV 二值化 threshold

一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、二值化算法 2.1、概述 在机器视觉应用中&#xff0c;OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理&#xff0c;以此大幅降低图像的数…

app小程序定制的重点|软件定制开发|网站搭建

app小程序定制的重点|软件定制开发|网站搭建 App小程序定制开发是近年来快速发展的一项技术服务&#xff0c;随着移动互联网的普及和用户需求的不断升级&#xff0c;越来越多的企业和个人开始关注和需求定制化的小程序开发。那么&#xff0c;对于app小程序定制开发来说&#xf…

第十五届蓝桥杯(Web 应用开发)模拟赛 1 期-大学组(详细分析解答)

目录 1.动态的Tab栏 1.1 题目要求 1.2 题目分析 1.3 源代码 2.地球环游 2.1 题目要求 2.2 题目分析 2.3 源代码 3.迷惑的this 3.1 题目要求 3.2 题目分析 3.3 源代码 4.魔法失灵了 4.1 题目要求 4.2 题目分析 4.3 源代码 5.燃烧你的卡路里 5.1 题目要求 5.2…

U-boot(四):start_armboot

本文主要探讨210的uboot启动的第二阶段&#xff0c;主要函数为start_armboot。 uboot 一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位 二阶段初始化其余硬件(iNand、网卡芯片)以及命令、环境变量等 启动打印硬件信息,进入bootdelay,读秒完后执行bootc…

(2023码蹄杯)省赛(初赛)第二场真题(原题)(题解+AC代码)

题目1&#xff1a;MC0214捡麦子 码题集OJ-捡麦子 (matiji.net) 思路: 1.第n米在前n-1米的基础上多加一个n个麦子&#xff0c;那么直接从1开始枚举&#xff0c;累加答案即可 AC_Code:C #include<bits/stdc.h> using namespace std;int main( ) {int n; cin>>n;…

ES6 — ES14 新特性

一、ES6 新特性&#xff08;2015&#xff09; 1. let和const 在ES6中&#xff0c;新增了let和const关键字&#xff0c;其中 let 主要用来声明变量&#xff0c;而 const 通常用来声明常量。let、const相对于var关键字有以下特点&#xff1a; 特性varletconst变量提升✔️全局…

NX二次开发UF_CAM_update_list_object_customization 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_update_list_object_customization Defined in: uf_cam.h int UF_CAM_update_list_object_customization(tag_t * object_tags ) overview 概述 This function provids the…

Elasticsearch:ES|QL 函数及操作符

如果你对 ES|QL 还不是很熟悉的话&#xff0c;请阅读之前的文章 “Elasticsearch&#xff1a;ES|QL 查询语言简介​​​​​​​”。ES|QL 提供了一整套用于处理数据的函数和运算符。 功能分为以下几类&#xff1a; 目录 ES|QL 聚合函数 AVG COUNT COUNT_DISTINCT 计数为近…

web:[WUSTCTF2020]朴实无华

题目 点开页面显示如下 页面显示了一行报错&#xff1a;Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:3) in /var/www/html/index.php on line 4 意思为不能修改报头信息-报头已经发送(输出开始于/var/www/html/i…

Ubuntu20.04 install pnpm

npm install -g pnpm referrence link: Installation | pnpmPrerequisiteshttps://pnpm.io/installation

嵌入式系统在工业自动化中的应用

嵌入式系统在工业自动化中的应用非常广泛&#xff0c;它们通过集成控制和实时响应能力&#xff0c;实现了生产线的自动化、智能化和高效化。以下将详细介绍嵌入式系统在工业自动化中的几个重要应用领域&#xff0c;并提供一些示例代码。 1. PLC&#xff08;可编程逻辑控制器&a…

Maven 简单配置阿里云镜像

配置步骤&#xff1a; 1、找到 maven 的安装目录&#xff0c;修改settings.xml 2、在文件中找到<mirrors>标签&#xff0c;然后再标签中添加阿里云配置即可 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共…

FFmpeg常用命令讲解及实战二

文章目录 前言一、ffmpeg 常用命令1、ffmpeg 的封装转换2、ffmpeg 的编转码3、ffmpeg 的基本编转码原理 二、ffprobe 常用参数1、show_format2、show_frames3、show_streams4、print_format5、select_streams 三、ffplay 的常用命令1、ffplay 常用参数2、ffplay 高级参数3、ffp…

ARCore:在Android上构建令人惊叹的增强现实体验

ARCore&#xff1a;在Android上构建令人惊叹的增强现实体验 一、 AR 介绍1.1 AR技术简介1.2 AR技术原理1.3 AR技术应用领域 二、Google的增强现实平台ARCore2.1 ARCore简介2.2 ARCore API介绍2.3 ARCore API使用示例 三、总结 一、 AR 介绍 增强现实 Augmented Reality&#x…

python中一个文件(A.py)怎么调用另一个文件(B.py)中定义的类AA详解和示例

本文主要讲解python文件中怎么调用另外一个py文件中定义的类&#xff0c;将通过代码和示例解读&#xff0c;帮助大家理解和使用。 目录 代码B.pyA.py 调用过程 代码 B.py 如在文件B.py,定义了类别Bottleneck&#xff0c;其包含卷积层、正则化和激活函数层&#xff0c;主要对…

【OpenCV实现图像:可视化目标检测框】

文章目录 概要画框函数代码实现标签美化角点美化透明效果小结 概要 目标检测框的可视化在计算机视觉和机器学习领域中是一项重要的任务&#xff0c;有助于直观地理解和评估目标检测算法的性能。通过使用Python和相关的图像处理库&#xff0c;可以轻松实现目标检测框的可视化。…

图神经网络的数学原理总结

图深度学习(Graph Deep Learning) 多年来一直在加速发展。许多现实生活问题使GDL成为万能工具&#xff1a;在社交媒体、药物发现、芯片植入、预测、生物信息学等方面都显示出了很大的前景。 本文将流行的图神经网络及其数学细微差别的进行详细的梳理和解释&#xff0c;图深度学…

docker国内镜像加速

创建或修改 /etc/docker/daemon.json 文件&#xff0c;修改为如下形式 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] } Docker中国区官方镜像htt…

OpenWRT软路由web界面如何远程访问

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面&#xff0c;使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口&#xff0c;无需公网IP&#xff0c;无需设置路由器。 1.openWRT安装cpola…

redis运维(十七)事务

一 redis事务 事务核心参考 ① 基础概念 1、场景引入核心&#xff1a;通过现象思考原因? 2、事务的概念 3、事务四大特性说明&#xff1a; redis只具备部分特性 重点1&#xff1a; 原子性和一致性 重点2&#xff1a; 隔离性和持久性 ② redis的事务 1、基础铺垫备注&…