【pyspark学习从入门到精通5】弹性分布式数据集_3

news2024/11/24 11:47:31

目录

Actions

.take(...) 方法

.collect(...) 方法

.reduce(...) 方法

.count(...) 方法

.saveAsTextFile(...) 方法

.foreach(...) 方法


Actions

与转换不同,动作是在数据集上执行计划任务的;一旦您完成了数据的转换,就可以执行您的转换。这可能不包含任何转换(例如,.take(n) 即使您没有对 RDD 进行任何转换,也会从 RDD 返回 n 条记录)或执行整个转换链。

.take(...) 方法

这可能是最有用的(并且使用频率高,如 .map(...) 方法)。与 .collect(...) 相比,此方法更受青睐,因为它只从单个数据分区返回前 n 行,而 .collect(...) 返回整个 RDD。当您处理大型数据集时,这一点尤其重要:

data_first = data_from_file_conv.take(1)

如果您想要一些随机记录,可以使用 .takeSample(...) 代替,它接受三个参数:第一个是采样是否应该有放回,第二个指定要返回的记录数,第三个是伪随机数生成器的种子:

data_take_sampled = data_from_file_conv.takeSample(False, 1, 667)

.collect(...) 方法

此方法将 RDD 的所有元素返回到驱动程序。正如我们刚刚提供了对此的警告,我们在这里不再重复。

.reduce(...) 方法

.reduce(...) 方法使用指定的方法减少 RDD 的元素。

您可以使用它来对 RDD 的元素求和:

rdd1.map(lambda row: row[1]).reduce(lambda x, y: x + y)

这将产生 15 的总和。

我们首先使用 .map(...) 转换创建 rdd1 的所有值的列表,然后使用 .reduce(...) 方法处理结果。reduce(...) 方法在每个分区上运行求和方法(这里用 lambda 表示),并将总和返回到驱动节点,在那里进行最终聚合。

.reduceByKey(...) 方法的工作原理与 .reduce(...) 方法类似,但它是按关键点进行归约的:

data_key = sc.parallelize(
 [('a', 4),('b', 3),('c', 2),('a', 8),('d', 2),('b', 1),
 ('d', 3)],4)
data_key.reduceByKey(lambda x, y: x + y).collect()

前面的代码产生了以下结果:

.count(...) 方法

.count(...) 方法统计 RDD 中的元素数量。使用以下代码:

data_reduce.count()

这段代码将产生 6,即 data_reduce RDD 中的确切元素数量。
.count(...) 方法与以下方法产生相同的结果,但它不需要将整个数据集移动到驱动程序:

len(data_reduce.collect()) # WRONG -- DON'T DO THIS!

如果您的数据集是键值对形式,您可以使用 .countByKey() 方法来获取不同键的数量。运行以下代码:

data_reduce.countByKey()

这段代码将产生以下输出:

.saveAsTextFile(...) 方法

顾名思义,.saveAsTextFile(...) 方法将 RDD 保存为文本文件:

每个分区对应一个单独的文件:

data_key.saveAsTextFile(
'/Users/drabast/Documents/PySpark_Data/data_key.txt')

要重新读取它,您需要将其解析回字符串,因为所有行都被当作字符串处理:

def parseInput(row):
 import re 
 pattern = re.compile(r'\(\'([a-z])\', ([0-9])\)')
 row_split = pattern.split(row)
 return (row_split[1], int(row_split[2]))
 
data_key_reread = sc \
 .textFile(
 '/Users/drabast/Documents/PySpark_Data/data_key.txt') \
 .map(parseInput)
data_key_reread.collect()

读取的键列表与我们最初拥有的匹配:

.foreach(...) 方法

这是一种对 RDD 的每个元素以迭代方式应用相同函数的方法;与 .map(...) 相反,.foreach(...) 方法以逐个的方式将定义的函数应用于每个记录。当您想要将数据保存到不受 PySpark 原生支持的数据库时,它很有用。

这里,我们将使用它在命令行界面(而不是 Jupyter Notebook)打印存储在 data_key RDD 中的所有记录:

def f(x): 
 print(x)
data_key.foreach(f)

如果您现在转到命令行界面,您应该会看到所有记录都被打印出来。注意,每次的顺序很可能不同。
 

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

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

相关文章

数学科普读物《从毕达哥拉斯到怀尔斯》

毕达哥拉斯是古希腊数学家,怀尔斯是英国数学家,曾任美国普林斯顿大学教授。这本书是哈工大出版社刘培杰先生主编的。这是一本500多页的书,我不禁慨叹高级数学爱好者刘培杰的博学广识,因为书中纵论古今旁征博引,仅书后的…

JavaWeb 18.监听器

目录 一、监听器概述 监听器的分类 按监听的对象划分 按监听的事件划分 二、监听器的六个主要接口 1.application监听器 2.session域监听器 3.request域监听器 三、session域的两个特殊监听器 1.session绑定监听器 2.钝化活化监听器 什么是钝化活化 如何配置钝化与活化 ​编辑 …

高并发下的库存扣减技术

背景 针对库存操作,宗旨:绝不超卖(存在资损、造成客诉、用户体验差)、尽量避免少卖(相对资损)。 在明星直播、大促、秒杀等高并发场景下,数据库的性能会变得非常差,传统的分库分表…

【C++进阶专栏】:priority_queue(优先级队列)?仿函数?

文章目录 前言1、优先级队列的使用?2、仿函数?3、优先级队列用仿函数实现大/小堆变换? 前言 priority_queue:优先级队列,别看有一个队列的名字,但结构个队列完全不一样。队列是一种先进先出的结构特征&…

AttributeError: ‘str‘ Object Has No Attribute ‘x‘:字符串对象没有属性x的完美解决方法

AttributeError: str Object Has No Attribute x:字符串对象没有属性x的完美解决方法 🔍💡 AttributeError: str Object Has No Attribute x:字符串对象没有属性x的完美解决方法 🔍💡摘要 📖引言…

四、音频播放

一、相关逻辑 在登录代码中调用,资源加载代码,然后再资源加载代码中调用。 1、登陆方法中: 单例类音频调用自己的方法,然后传入配置代码中的常量 2、音频播放代码中: 首先设置为一个单例类,然后初始化一…

精益与数字化的融合:制造业的创新之路

回望过去,精益管理作为制造业的瑰宝,以其“消除浪费、持续改进、顾客至上”的核心理念,引领了无数企业走向成功。从丰田生产方式到全球范围内的广泛实践,精益管理不仅提升了生产效率,更重塑了企业的文化和价值观。它教…

【Python大语言模型系列】一文教你使用dify云版本开发一个简单的Agent(完整教程)

这是我的第365篇原创文章。 一、引言 智能助手(Agent),利用大语言模型的推理能力,能够自主对复杂的人类任务进行目标规划、任务拆解、工具调用、过程迭代,并在没有人类干预的情况下完成任务。 本文我们将搭建一个旅行…

vt虚拟化怎么开启_各品牌主板及品牌机开启VT虚拟化教程

VT指的是CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。下面,小编给大家介绍电脑开启vt的操作步骤。 VT虚…

[LeetCode] 155. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

TiDB 监控组件之 Blackbox_exporter 运行原理

作者: TiDBerHailang 原文来源: https://tidb.net/blog/b269e96f 1. 介绍 本文介绍了 TiDB 集群监控组件Blackbox Exporter监控运行机制和配置方式。Blackbox Exporter是Prometheus官方提供的 Exporter,它能够通过多种协议对网络服务进行…

使用HTML、CSS和JavaScript创建滚动弹幕效果

使用HTML、CSS和JavaScript创建滚动弹幕效果 在现代网页设计中,滚动文本是一种常见的动态效果,可以吸引用户的注意力并增强交互体验。在这篇博客文章中,我们将详细介绍如何使用HTML、CSS和JavaScript实现滚动文本效果。 效果 步骤1&#xf…

【电商购物管理系统】Python+Django网页界面平台+商品管理+数据库

一、介绍 电商购物管理系统,本系统前端使用HTML、CSS、BootStrap等技术搭建前端界面,后端使用Django框架处理用户的逻辑请求。主要功能有: 管理员登录与管理:管理员可以登录后台,对用户和商品进行增删改查的操作。用…

使用mybatis查询数据库时,表有数据但是为空值null

前言 数据库有数据但是查出来都是空的 解决方法 这里写错了, resultType只能用在数据库字段和实体类字段一致的情况下,而数据库多单词通常用下划线隔开,不能映射到驼峰命名的实体类属性上,因此得使用一个ResultMap 1.定义映射映…

【C++】set/map(重点解析)

目录 一、关联式容器和序列式容器 二、C中的键值对——pair 1.概念 2.定义 3.构造pair 三.set 1.construct构造 2.iterator迭代器 3.insert插入 4.erase删除 5.find查找 6.lower_bound和upper_bound 7.count 四.multiset 五.map 1.insert 2.operator[] 一、…

Pygame实现音乐可视化

pip install pydub pip install ffmpeg pip install pyaudio 完整代码如下: import pygame,sys import random import numpy as np from random import randint import colorsys from pydub import AudioSegment import mathdef rnd_color(): #随机颜色h,s,l…

Python的reshape的用法和reshape(1,-1)、reshape(-1,1)

在创建DataFrame的时候常常使用reshape来更改数据的列数和行数。 reshape可以用于numpy库里的ndarray和array结构以及pandas库里面的DataFrame和Series结构。 reshape(行,列)可以根据指定的数值将数据转换为特定的行数和列数,这个…

用SAM2和Cutie模型目标追踪

一、数据集 视频:每个视频文件夹以图片帧的形式存储 box:给出每个视频第一帧要追踪的物体的box 二、将数据格式转换成SAM2所需要的格式 主要是将box转换成mask的格式,下面这个代码就是将box转换成mask的代码,具体转换原理如下…

深圳易图讯科技有限公司承建的厦门应急处突大队三维电子沙盘顺利通过专家验收

近日,深圳易图讯科技有限公司承建的厦门应急处突大队三维电子沙盘系统项目成功通过专家组的严格验收,标志着该系统在应急管理和处置突发事件方面的应用取得了重要突破。 验收过程中,专家组对三维电子沙盘系统的各项功能进行了全面而细致的测试…

第十六周:机器学习笔记

第十六周周报 摘要Abstratc一、机器学习1. Pointer Network(指针网络)2. 生成式对抗网络(Generative Adversarial Networks | GAN)——(上)2.1 Generator(生成器)2.2 Discriminator&…