pyspark笔记:over

1 方法介绍

  • 在 PySpark 中,over 函数是一个非常重要的概念,尤其是在使用窗口函数(例如 row_number, rank, dense_rank, lead, lag 等)时。
  • over 函数允许你对一个数据集进行分组,然后在每个分组内应用窗口函数。

1.1 基本概念

  • 窗口函数

    • 在 PySpark 中,窗口函数是用于执行聚合和其他复杂操作的函数,这些操作涉及到某种形式的分区和排序。

    • 窗口函数不会导致行被折叠成单个输出行,不像标准的聚合函数那样。相反,它们会生成与输入行数相同的输出行数。

  • 窗口规范(Window Specification)

    • 在使用 over 函数时,你需要定义一个窗口规范。这个规范描述了窗口函数的作用范围,包括如何对数据进行分区(partitioning)、如何排序(ordering)以及是否有行或范围限制(frame specification)

1.2 over函数通常步骤

在 PySpark 中,使用 over 函数通常涉及以下步骤:

  • 定义窗口规范

    • 使用 Window 类来定义分区和排序规则。

    • 例如,Window.partitionBy("column1").orderBy("column2") 表示按 column1 进行分区,并在每个分区内按 column2 排序。

  • 应用窗口函数

    • 窗口函数被应用于定义的窗口规范。
    • 例如,F.row_number().over(windowSpec) 会在每个按 windowSpec 定义的窗口内对行进行编号。
      • 在这里,F.row_number() 是窗口函数,而 .over(windowSpec) 则指定了这个函数应该如何在数据上操作。

2 举例

2.1 创建DataFrame

假设有一个如下的 DataFrame:

from pyspark.sql import Row

data = [
     Row(id=1, Group='A',Value=10),
     Row(id=2, Group='A',Value=20),
     Row(id=3, Group='B',Value=30),
     Row(id=4, Group='B',Value=40)
]
 
df = spark.createDataFrame(data)
 
df.show()

 

现在,如果你想在每个 Group 内部对 Value 进行排名,你可以使用 over 函数与 rank() 窗口函数结合来实现这一点:

2.2 定义窗口规范

from pyspark.sql.window import Window
import pyspark.sql.functions as F

windowSpec = Window.partitionBy("Group").orderBy("Value")

'''
partitionBy("Group") 表示数据将根据 Group 列的值进行分区。在每个分区内,数据行将独立于其他分区处理。
orderBy("Value") 指定了在每个分区内,数据将根据 Value 列的值进行排序。

注:此时windowSpec 本身并不知道它将被应用于哪个 DataFrame。它只是定义了一个窗口规范
'''

2.3 应用窗口规范到 DataFrame

windowSpec 本身并不知道它将被应用于哪个 DataFrame。它只是定义了一个窗口规范。当在 df.withColumn 中使用 .over(windowSpec) 时,就指定了在 df 上应用这个窗口规范。

df.withColumn("rank", F.rank().over(windowSpec)).show()

'''
df.withColumn———— 创建了 df 的一个新版本,其中包含了一个新列 "rank"


F.rank().over(windowSpec) ————计算了一个窗口函数 rank,该函数在 windowSpec 定义的每个分区内为每行分配一个排名

'''

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

洋州影院购票系统:如何用Java、Spring Boot、Vue和MySQL实现现代化管理

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

Ubuntu20.4 Mono C# gtk 编程习练笔记(三)

Mono对gtk做了很努力的封装,即便如此仍然与System.Windows.Form中的控件操作方法有许多差异,这是gtk本身特性或称为特色决定的。下面是gtk常用控件在Mono C#中的一些用法。 Button控件 在工具箱中该控件的clicked信号双击后自动生成回调函数prototype&…

AI嵌入式K210项目(17)-快速傅里叶变换加速器 (FFT)

文章目录 前言一、什么是傅里叶变换?二、K210的快速傅里叶变换加速器实验过程总结 前言 K210内置了丰富的加速器,包括神经网络处理器 (KPU),AES(高级加密加速器),APU 麦克风阵列语音数据加速计算处理器,现场可编程 IO…

Netty-Netty源码分析流程图

netty服务端流程图 补充 完善客户端

AttributeError: module ‘numpy‘ has no attribute ‘float‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

《WebKit 技术内幕》之六(2): CSS解释器和样式布局

2 CSS解释器和规则匹配 在了解了CSS的基本概念之后,下面来理解WebKit如何来解释CSS代码并选择相应的规则。通过介绍WebKit的主要设施帮助理解WebKit的内部工作原理和机制。 2.1 样式的WebKit表示类 在DOM树中,CSS样式可以包含在“style”元素中或者使…

java数据类型

基本数据类型:(8种) 整型:byte、short、int、long 浮点型:float、double 字符型:char 布尔类型:boolean 1、整数类型(整型) 2、浮点类型 细节:如果是直接查询得到的小数或者直接赋值…

C++入门学习(十)如何显示浮点数的完整形态

在C中&#xff0c;如果你想要显示浮点数的完整数字&#xff08;包括小数部分和指数部分&#xff09;&#xff0c;可以使用 std::setprecision 和 std::fixed 来设置精度和固定小数点表示&#xff1a; #include <iostream> #include <iomanip> // 必须包含这个头…

Python实现离散选择Logit模型(Logit算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Logit模型&#xff08;Logit model&#xff0c;也译作“评定模型”&#xff0c;“分类评定模型”&…

小程序使用echarts图表-雷达图

本文介绍下小程序中如何使用echarts 如果是通过npm安装&#xff0c;这样是全部安装的&#xff0c;体积有点大 我这边是使用echarts中的一个组件来实现的&#xff0c;下边是具体流程&#xff0c;实际效果是没有外边的红色边框的&#xff0c;加红色边框的效果是这篇说明 1.echa…

测试覆盖与矩阵

4. Coverage - 衡量测试的覆盖率 我们已经掌握了如何进行单元测试。接下来&#xff0c;一个很自然的问题浮现出来&#xff0c;我们如何知道单元测试的质量呢&#xff1f;这就提出了测试覆盖率的概念。覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分已被测…

【SpringBoot技术专题】「开发实战系列」Undertow web容器的入门实战及调优方案精讲

Undertow web容器的入门实战及调优方案精讲 Undertow web容器Undertow 介绍官网API给出一句话概述Undertow&#xff1a;官网API总结特点&#xff1a;Lightweight&#xff08;轻量级&#xff09;HTTP Upgrade Support&#xff08;支持http升级&#xff09;、HTTP/2 Support支持H…

【Linux 内核源码分析】堆内存管理

堆 堆是一种动态分配内存的数据结构&#xff0c;用于存储和管理动态分配的对象。它是一块连续的内存空间&#xff0c;用于存储程序运行时动态申请的内存。 堆可以被看作是一个由各个内存块组成的堆栈&#xff0c;其中每个内存块都有一个地址指针&#xff0c;指向下一个内存块…

学生公寓智能控电系统的重要性

学生公寓智能控电系统石家庄光大远通电气有限公司学生宿舍内漏电&#xff0c;超负荷用电&#xff0c;违规用电等现象一直是困扰后勤管理的普遍问题。随着学生日常生活方式以及生活用品的改变&#xff0c;电脑以及各种电器逐渐的普及&#xff0c;导致用电量与日俱增&#xff0c;…

竞赛保研 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

翻译: Anaconda 与 miniconda的区别

Anaconda 和 miniconda 是广泛用于数据科学的软件发行版&#xff0c;用于简化包管理和部署。 1. 主要有两个区别&#xff1a; packages包数量&#xff1a; Anaconda 附带了 150 多个数据科学包&#xff0c;而 miniconda 只有少数几个。Interface接口&#xff1a;Anaconda 有…

mfc110.dll丢失是什么意思?全面解析mfc110.dll丢失的解决方法

在使用计算机的过程中&#xff0c;用户可能会遭遇一个常见的困扰&#xff0c;即系统提示无法找到mfc110.dll文件。这个动态链接库文件&#xff08;DLL&#xff09;是Microsoft Foundation Classes&#xff08;MFC&#xff09;库的重要组成部分&#xff0c;对于许多基于Windows的…

node.js项目express的初始化

目录 1.初始化项目2.配置跨域3.开始编写API3.1准备3.2路由处理函数router_make下的user.js3.3路由模块router下的user.js3.4入口文件app.js里面去新增这段代码3.5启动项目进行测试 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你…

设备管理——WinCC 给你神助功

要实现“设备高效”&#xff0c;就必须“管之有道”&#xff0c;来自设备层的数据支撑将是必不可少的&#xff0c;提高设备效能的2个关键在于降低平时停机时间 (MDT) 和提高平均无故障时间 (MTBF)。通常来说&#xff0c;设备维护可大致可分为三个层次&#xff1a;纠正性维护&am…

[Tool] python项目中集成使用Firebase推送功能

背景介绍 目前&#xff0c;App推送功能已经非常普遍&#xff0c;几乎所有App都有推送功能。推送功能可以自己实现&#xff0c;也可以使用第三方提供的推送服务&#xff08;免费的收费的都有&#xff09;。本文主要介绍使用Firebase提供的推送服务Firebase Cloud Messaging&…