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

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 Rowdata = [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 FwindowSpec = 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 定义的每个分区内为每行分配一个排名'''

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Halcon 边缘提取
  • 【JavaWeb】XML Tomcat10 HTTP
  • 计算机组成原理 第一弹
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • flask 与小程序 菜品详情和分享功能
  • 全球光伏知名企业-晶科能源联合泛微采知连,建立文控管理平台
  • C#基础:通过QQ邮件发送验证码到指定邮箱
  • 运动的解析:从机械运动到自由落体,探索物体运动的基本规律与数学描述
  • php基础学习之代码框架
  • 【JavaEE Spring】SpringBoot 日志
  • python-分享篇-爱心
  • 【Java】HttpServlet类简单方法和请求显示
  • 什么是OSPF?为什么需要OSPF?OSPF基础概念
  • USRP相关报错解决办法
  • 为什么 macOS 比 Windows 稳定?
  • 《剑指offer》分解让复杂问题更简单
  • Android单元测试 - 几个重要问题
  • CSS 专业技巧
  • js学习笔记
  • Mac转Windows的拯救指南
  • 机器学习中为什么要做归一化normalization
  • 前嗅ForeSpider中数据浏览界面介绍
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何胜任知名企业的商业数据分析师?
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 收藏好这篇,别再只说“数据劫持”了
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • $jQuery 重写Alert样式方法
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Git) gitignore基础使用
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二) 初入MySQL 【数据库管理】
  • (回溯) LeetCode 40. 组合总和II
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (南京观海微电子)——I3C协议介绍
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十六)视图变换 正交投影 透视投影
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • ./configure,make,make install的作用
  • .dwp和.webpart的区别
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .Net6使用WebSocket与前端进行通信
  • .NET框架
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET业务框架的构建
  • .net中应用SQL缓存(实例使用)