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

Spark算子使用-Map,FlatMap,Filter,diatinct,groupBy,sortBy

目录

Map算子使用

FlatMap算子使用

Filter算子使用-数据过滤

Distinct算子使用-数据去重

groupBy算子使用-数据分组

sortBy算子使用-数据排序


Map算子使用

# map算子主要使用长场景,一个转化rdd中每个元素的数据类型,拼接rdd中的元素数据,对rdd中的元素进行需求处理
# 需求,处理hdfs中的学生数据,单独获取每个学生的信息
from pyspark import SparkContextsc = SparkContext()# 1-读取数据
rdd = sc.textFile("hdfs://node1:8020/data/student.txt")
# 2- 使用转化算子进行数据处理
# map中的lambda表达式,必须定义一个参数,用来接收rdd中的元素数据, 注意:x参数如何处理,要看x接收的数据类型
rdd2 = rdd.map(lambda x : x.split(','))
# 3-从rdd2中获取姓名数据
rdd3 =rdd2.map(lambda x : x[1])# lambda 函数能进行简单的数据计算,如果遇到复杂数据计算时,就需要使用自定义函数
# 获取年龄数据,并且转化年龄数据为int类型,将年龄和性别合并一起保存成元组
## 获取年龄
def func(x):# 1-切割数据data_split = x.split(',')# 2-转换数据类型age = int(data_split[3])# 3-拼接性别与年龄data_tuple = (data_split[2],age)return data_tuple# 将函数的名字传递到map中,不要加括号
rdd4 = rdd.map(func)# 触发执行算子,查看读取的数据
res = rdd.collect()
print(res)res2 = rdd2.collect()
print(res2)res3 = rdd3.collect()
print(res3)res4 = rdd4.collect()
print(res4)

FlatMap算子使用

# FlatMap算子使用
# 主要场景是对二维嵌套的数据降维操作  [[1,张三],[2,李四],[3,王五]]  --->> [1,张三,2,李四,3,王五]
from pyspark import SparkContextsc = SparkContext()# 生成的rdd
rdd = sc.parallelize([['1', 'alice', 'F', '32'], ['2', 'Tom', 'M', '22'], ['3', 'lili', 'F', '18'], ['4', 'jerry', 'M', '24']])# 使用flatmap
rdd1 = rdd.flatMap(lambda x: x)  # 直接返回x,会自动将x中的元素数据取出,放入新的rdd中# 查看数据
res = rdd1.collect()
print(res)

Filter算子使用-数据过滤

# RDD数据过滤
# 需求:过滤年龄大于20岁的信息
from pyspark import  SparkContext
sc = SparkContext()# 1- 读取hdfs中的学生数据
rdd = sc.textFile('hdfs://node1:8020/data/student.txt')# 2- 使用转化算子进行数据处理
# map中的lambda表达式,必须定义一个参数,用来接收rdd中的元素数据, 注意:x参数如何处理,要看x接收的数据类型
rdd2 = rdd.map(lambda x:x.split(','))
# 使用fliter方法进行数据过滤
# lambda x:过滤条件  可以当成 if 操作  if 条件
# 符合条件的数据会返回保存在新的rdd中
rdd3 = rdd2.filter(lambda x :int(x[3]) > 20)# 查看数据
res = rdd2.collect()
print(res)res3 = rdd3.collect()
print(res3)

Distinct算子使用-数据去重

# distinct  去重算子
# rdd中有重复数据时,可以进行去重
from pyspark import  SparkContext
sc = SparkContext()# 1- 读取hdfs中的学生数据
rdd = sc.textFile('hdfs://node1:8020/data/student.txt')# 2- 使用转化算子进行数据处理
# map中的lambda表达式,必须定义一个参数,用来接收rdd中的元素数据, 注意:x参数如何处理,要看x接收的数据类型
rdd2 = rdd.map(lambda x:x.split(','))# 3-从rdd2中获取性别数据
rdd3 = rdd2.map(lambda x : x[2])# 对rdd3中重复数据去重
rdd4 = rdd3.distinct()# 查看数据
res = rdd3.collect()
print(res)res1 = rdd4.collect()
print(res1)

groupBy算子使用-数据分组

from pyspark import  SparkContext
sc = SparkContext()# 1- 读取hdfs中的学生数据
rdd = sc.textFile('hdfs://node1:8020/data/student.txt')# 2- 使用转化算子进行数据处理
# map中的lambda表达式,必须定义一个参数,用来接收rdd中的元素数据, 注意:x参数如何处理,要看x接收的数据类型
rdd2 = rdd.map(lambda x:x.split(','))# 3-对性别进行分组
# lambda x: hash取余的计算  hash(数据)%分组数      余数相同的数据会放在一起
rdd3 = rdd.groupBy(lambda x:hash(x[2]) % 2)
# 查看分组的数据内容  mapValues 取出分组后的数据值,对数据值转为列表即可
rdd4 = rdd3.mapValues(lambda x:list(x))# 查看数据
res2 = rdd2.collect()
print(res2)res3 = rdd3.collect()
print(res3)res4 = rdd4.collect()
print(res4)

分组算子用到了哈希算法,lambda x: hash取余的计算  hash(数据)%分组数      余数相同的数据会放在一起
rdd3 = rdd.groupBy(lambda x:hash(x[2]) % 2)

sortBy算子使用-数据排序

# RDD的数据排序
from pyspark import SparkContextsc = SparkContext()# 创建数据
# 非kv数据
rdd = sc.parallelize([10,45,27,18,5,29])# 在spark中可以使用元组表示kv数据(k,v)
rdd2 = sc.parallelize([('张三',27),('李四',18),('王五',31),('赵六',21)])rdd1 = sc.parallelize([(666,'火眼金睛'),(2000,'筋斗云'),(888,'顺风耳'),(1314,'降龙十八掌')])# 数据排序
# 非kv数据
rdd3 = rdd.sortBy(lambda x: x)  # 默认升序,从小到大排
rdd4 = rdd.sortBy(lambda x: x,ascending=False)  # 降序# kv数据排序 x接收(k,v)数据  需要指定采用哪个值进行排序
# 根据v值进行排序
rdd5 = rdd2.sortBy(lambda x: x[1])
rdd6 = rdd2.sortBy(lambda x: x[1],ascending=False)# 根据k值进行排序
rdd7 = rdd1.sortBy(lambda x: x[0])
rdd8 = rdd1.sortBy(lambda x: x[0],ascending=False)# 查看结果
# 非kv数据
res1 = rdd3.collect()
res2 = rdd4.collect()
print(res1)
print(res2)# kv数据排序
res5 = rdd5.collect()
res6 = rdd6.collect()
print(res5)
print(res6)res7 = rdd7.collect()
res8 = rdd8.collect()
print(res7)
print(res8)

join算子使用-数据关联

准备数据,模拟表关联

students.txt

students2.txt

from pyspark import SparkContext
# rdd也是使用join算子进行kv数据关联 ,如果需要将多个rdd数据关联在一起
# 需要现将rdd的数据转为kv结构,关联的字段数据作为key
sc = SparkContext()
# 分别读取两个文件数据
rdd1 = sc.textFile('hdfs://node1:8020/data/students.txt')
rdd2 = sc.textFile('hdfs://node1:8020/data/students2.txt')# 切割行数
rdd_line1 = rdd1.map(lambda x:x.split(','))
rdd_line2 = rdd2.map(lambda x:x.split(','))# 将rdd数据进行关联
# 将关联的数据转为kv结构
rdd_kv1 = rdd_line1.map(lambda x:(x[0],x))
rdd_kv2 = rdd_line2.map(lambda x:(x[0],x))# 使用join关联
rdd_join = rdd_kv1.join(rdd_kv2) # 内关联
rdd_leftjoin = rdd_kv1.leftOuterJoin(rdd_kv2) # 左关联
rdd_rightjoin = rdd_kv1.rightOuterJoin(rdd_kv2) # 右关联# 查看数据res3 = rdd_join.sortBy(lambda x:x[0]).collect() # 找相同数据
print(res3)res4 = rdd_leftjoin.collect() # 左表数据全部展示,右边右相同数据展示,没有相同数据为空None
print(res4)res5 = rdd_rightjoin.collect() # 右表数据全部展示,左边右相同数据展示,没有相同数据为空None
print(res5)

 join内关联:只有共同的才展示

leftOuterJoin左关联:左表数据全部展示,右边右相同数据展示,没有相同数据为空None

rightOuterJoin右关联:右表数据全部展示,左边右相同数据展示,没有相同数据为空None

相关文章:

Spark算子使用-Map,FlatMap,Filter,diatinct,groupBy,sortBy

目录 Map算子使用 FlatMap算子使用 Filter算子使用-数据过滤 Distinct算子使用-数据去重 groupBy算子使用-数据分组 sortBy算子使用-数据排序 Map算子使用 # map算子主要使用长场景,一个转化rdd中每个元素的数据类型,拼接rdd中的元素数据&#xf…...

CSS响应式布局

CSS 响应式布局也称自适应布局,是 Ethan Marcotte 在 2010 年 5 月份提出的一个概念,简单来讲就是一个网站能够兼容多个不同的终端(设备),而不是为每个终端做一个特定的版本。这个概念是为解决移动端浏览网页而诞生的。…...

AI大模型书籍丨掌握 LLM 和 RAG 技术,这本大模型小鸟书值得一看!

本指南旨在帮助数据科学家、机器学习工程师和机器学习/AI 架构师探索信息检索与 LLMs 的集成及其相互增强。特别聚焦于 LLM 和检索增强生成(RAG)技术在信息检索中的应用,通过引入外部数据库与 LLMs 的结合,提高检索系统的性能。 …...

Mysql和Oracle使用差异和主观感受

这两种常用的关系型数据库有何差异? 支持和社区 MySQL:有一个活跃的开源社区,用户可以获取大量的文档和支持。 Oracle:提供了专业的技术支持,但通常需要额外的费用。 易用性 MySQL:通常被认为是更易于学…...

【Java】—— File类与IO流:File类的实例化与常用方法

目录 1. java.io.File类的使用 1.1 概述 1.2 构造器 1.3 常用方法 1、获取文件和目录基本信息 2、列出目录的下一级 3、File类的重命名功能 4、判断功能的方法 5、创建、删除功能 1.4 练习 练习1: 练习2: 练习3: 1. java.io.Fil…...

C++设计模式——装饰器模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 什么是装饰器模式? 装饰器模式(Decorator Pattern)是一种结构型设计模式,允许你向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创…...

C#使用ITextSharp生成PDF文件实例详解

许多项目开发中需要生成PDF, 常规办法使用官方提供的Microsoft.Office.Interop.Worddll插件,但是这种方法需要完全安装OFFICE,另外版本不一致还会出现很多错误。一般不推荐使用。 下面介绍这种巧妙的用法,定能事半功倍。 本文使用ITextSharp完成功能。 首先,通过NuGet…...

10.9QT对话框以及QT的事件机制处理

MouseMoveEvent(鼠标移动事件) widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 设置窗口为无边框,去掉标题栏等装饰this->setWi…...

SiLM266x系列SiLM2661高压电池组前端充/放电高边NFET驱动器 为电池系统保护提供可靠性和设计灵活性

SiLM2661产品概述: SiLM2661能够灵活的应对不同应用场景对锂电池进行监控和保护的需求,为电池系统保护提供可靠性和设计灵活性。是用于电池充电/放电系统控制的低功耗、高边 N 沟道 FET 驱动器,高边保护功能可避免系统的接地引脚断开连接&am…...

linux中sed命令详解

sed 是 Linux 中的一个流编辑器(stream editor),主要用于处理文本的编辑和转换。它可以从文件或标准输入读取内容,然后根据指定的模式和指令对数据进行处理,最后输出修改后的结果。它的强大之处在于可以通过脚本或命令…...

vue 模板语法

Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML解析器解析。 文本插值 最基本的数据绑定形式是文本插值,它使用的是…...

bladex漏洞思路总结

Springblade框架介绍: SpringBlade是一个基于Spring Boot和Spring Cloud的微服务架构框架,它是由商业级项目升级优化而来的综合型项目。 0x1 前言 最近跟一些大佬学习了blade的漏洞,所以自己总结了一下,在渗透测试过程中&#x…...

解决SqlServer自增主键使用MybatisPlus批量插入报错问题

报错 SqlServer 表中主键设置为自增,会报以下错误。 org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获…...

leetcode:反转字符串中的单词III

题目链接 string reverse(string s1) {string s2;string::reverse_iterator rit s1.rbegin();while (rit ! s1.rend()){s2 *rit;rit;}return s2; } class Solution { public:string reverseWords(string s) {string s1; int i 0; int j 0; int length s.length(); for (i …...

深度学习常见问题

1.YOLOV5和YOLOV8的区别 YOLOv5 和 YOLOv8 是两个版本的 YOLO(You Only Look Once)目标检测算法,它们在网络架构、性能优化、功能扩展等方面有显著的区别。YOLOv5 是 YOLO 系列的重要改进版本,而 YOLOv8 是最新的一次重大升级&am…...

神经网络的一些benchmark示例

1.MLPerf https://github.com/mlcommons/inference?tabreadme-ov-file https://docs.mlcommons.org/inference/benchmarks/text_to_image/sdxl/ MLPerf 是一个业界标准的机器学习基准测试套件,旨在评估各种硬件、框架和模型的性能。它包含训练和推理两个部分&…...

如何进行统级架构设计

统级架构设计是一个复杂的过程,需要综合考虑业务需求、技术选型、系统可扩展性、可维护性等多个方面。以下是一份系统级架构设计的方法论,包括以下几个步骤: 需求分析: 与业务相关人员进行深入沟通,了解业务需求、业…...

鼓组编写:SsdSample鼓映射 GM Map 自动保存 互换midi位置 风格模板 逻辑编辑器

SsdSample音源的键位映射 方便编写鼓的技巧 可以这样去设置键位关系的面板和钢琴卷帘窗的面板,方便去写鼓。 可以先按GM的midi标准去写鼓,然后比对下鼓的键位映射的关系,去调整鼓。 可以边看自己发b站等处的图文笔记,然后边用电…...

使用YOLOv11进行视频目标检测

使用YOLOv11进行视频目标检测 完整代码 import cv2 from ultralytics import YOLOdef predict(chosen_model, img, classes[], conf0.5):if classes:results chosen_model.predict(img, classesclasses, confconf)else:results chosen_model.predict(img, confconf)return r…...

DEEP和DeepBook V3将于10月14日推出

10月14日星期一,DeepBook V3和DEEP token将同时在Sui上线。这两个公告标志着Sui生态内流动性发展的重要时刻,同时引入了去中心化和治理机制。 经过数月的开发,基于Sui构建的安全且完全链上的中央限价订单簿(Central Limit Order …...

学习之高阶编程列表推导式,字典推导式

def test_list_one(): “”“快速生成一个[“data0”, “data1”,]列表”“” list1 [] for i in range(100): list1.append(“data{}”.format(i)) return list1 def test_list_two(): “”" 快速生成一个[“data0”, “data1”,]列表 列表推导式:[x for x …...

QT实现QInputDialog中文按钮

这是我记录Qt学习过程心得文章的第三篇,主要是为了方便QInputDialog输入框的使用,通过自定义的方式,按钮中文化,统一封装成一个函数,还是写在了Skysonya类里面。 实现代码: //中文按钮文本输入对话框 QSt…...

Redis 常用指令技术解读

全文目录: 前言前言摘要简介概述Redis的核心特性Redis指令分类 核心源码解读SET和GET指令EXPIRE指令HSET和HGET指令LPUSH和LPOP指令SADD和SMEMBERS指令ZADD和ZRANGE指令 案例分析案例1:用户登录会话管理案例2:排行榜实现 应用场景演示优缺点分…...

Web前端入门

文章目录 前言1 Web前端概述1.1 网站和网页1.2 HTML语言1.3 网页的形成1.4 常用浏览器1.5 浏览器内核(渲染引擎)1.6 web标准 2 HTML标签2.1 开发工具2.2 HTML语法规则2.3 标签的关系2.4 HTML注释标签2.5 结构标签 3 常用标签3.1 标题标签3.2 段落标签3.3 换行标签3.…...

贝塞尔曲线详细讲解,如何用 Canvas 绘制三阶贝塞尔曲线?

比如我们要画一个这样的曲线&#xff0c;我们该怎么画了 两个点Y轴一样高&#xff0c;起点&#xff1a;&#xff08;200,100&#xff09;终点&#xff1a;&#xff08;300&#xff0c;100&#xff09;中间的弧度怎么弄了&#xff1f; <canvas id"c1" width"6…...

Ubuntu20.04卸载ros2 foxy版本安装ros1 noetic版本

前言 如果你ubuntu中没有ros&#xff0c;可以试着直接从鱼香ros一键安装包指令处开始。 卸载ros2 sudo apt-get remove ros-*接下来如果你直接使用鱼香ros的一键安装命令&#xff0c;会出错。 设置源 设置源&#xff0c;这里使用的是中科大的。 sudo sh -c . /etc/lsb-r…...

PicGo+Gitee搭建Typora图床

PicGoGitee搭建Typora图床 下载PicGo 下载链接&#xff1a;https://picgo.github.io/PicGo-Doc/zh/guide/#%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85 配置PicGo 插件安装 在PicGo的【插件设置】中搜索gitee-uploader插件并安装 在【图床设置】下配置Gitee repo&#xff1a;用…...

MySQL 脱敏函数使用详解:保护数据隐私的关键手段

全文目录&#xff1a; 前言前言为什么需要数据脱敏&#xff1f;MySQL 中常用的脱敏方法1. 字符串类型数据的脱敏案例&#xff1a;脱敏姓名案例&#xff1a;脱敏邮箱 2. 数字类型数据的脱敏案例&#xff1a;脱敏手机号案例&#xff1a;脱敏身份证号 3. 自定义脱敏函数自定义姓名…...

nginx之virtual host

vhost 是“virtual host”的缩写&#xff0c;中文译为“虚拟主机”。在Web服务器&#xff08;如Nginx、Apache等&#xff09;中&#xff0c;虚拟主机是指在同一台物理服务器上运行多个独立的网站或应用程序的技术。每个虚拟主机都有自己的域名、文档根目录、配置文件等&#xf…...

Windows 下纯手工打造 QT 开发环境

用过 QtCreator 和 VS QT 插件&#xff0c;都觉得不是很理想。所以有了这个想法。 手工打造的 QT 的开发环境&#xff0c;是不需要安装上面两个程序的。 1、下载 vcpkg&#xff0c;编译 QT6 下载地址&#xff1a;https://github.com/microsoft/vcpkg.git 进入到 …...