首页 > 其他分享 >spark2.4 dataframe 分组聚合window

spark2.4 dataframe 分组聚合window

时间:2023-07-22 16:02:47浏览次数:38  
标签:dataframe 聚合 df Alice DataFrame window score 分组 spark2.4

Spark 2.4 DataFrame分组聚合和窗口函数

简介

Apache Spark是一个强大的分布式计算框架,可以用于处理大规模的数据。Spark提供了多种操作数据的方式,其中DataFrame是一种基于分布式数据集的API,它提供了一种高级的数据操作接口,可以方便地对大规模数据进行分组聚合和窗口函数的处理。

在本文中,我们将介绍Spark 2.4中DataFrame的分组聚合和窗口函数的使用,并通过代码示例演示其用法。

DataFrame分组聚合

DataFrame分组聚合是指对数据根据某个或多个列进行分组,然后对每个分组进行聚合操作,比如求和、平均值、计数等。

下面是一个示例,假设我们有一个包含学生姓名和成绩的DataFrame,我们想要按照学生姓名进行分组,并计算每个学生的平均成绩:

from pyspark.sql import SparkSession
from pyspark.sql.functions import avg

# 创建SparkSession
spark = SparkSession.builder.appName("DataFrame GroupBy and Aggregation").getOrCreate()

# 创建示例DataFrame
data = [("Alice", 80),
        ("Bob", 90),
        ("Alice", 85),
        ("Bob", 95),
        ("Charlie", 75)]
df = spark.createDataFrame(data, ["name", "score"])

# 分组聚合
df_grouped = df.groupBy("name").agg(avg("score").alias("avg_score"))

# 显示结果
df_grouped.show()

运行以上代码,输出结果如下:

+-------+---------+
|   name|avg_score|
+-------+---------+
|    Bob|     92.5|
|  Alice|     82.5|
|Charlie|     75.0|
+-------+---------+

在上面的代码中,我们首先使用groupBy方法根据"name"列进行分组,然后使用agg方法对每个分组进行聚合操作,这里使用了avg函数计算分组中"score"列的平均值,并将结果重命名为"avg_score"。最后,我们使用show方法显示结果。

除了平均值之外,还可以使用其他聚合函数,比如求和、最大值、最小值、计数等。只需将对应的函数作为参数传递给agg方法即可。

窗口函数

除了分组聚合之外,DataFrame还提供了窗口函数的功能,窗口函数是一种特殊的聚合操作,可以对分组后的数据进行更细粒度的处理。

下面是一个示例,假设我们有一个包含学生姓名、成绩和班级的DataFrame,我们想要计算每个学生在班级内的排名:

from pyspark.sql import SparkSession
from pyspark.sql.functions import rank

# 创建SparkSession
spark = SparkSession.builder.appName("DataFrame Window Function").getOrCreate()

# 创建示例DataFrame
data = [("Alice", 80, "A"),
        ("Bob", 90, "A"),
        ("Alice", 85, "B"),
        ("Bob", 95, "B"),
        ("Charlie", 75, "B")]
df = spark.createDataFrame(data, ["name", "score", "class"])

# 定义窗口规范
window_spec = Window.partitionBy("class").orderBy(col("score").desc())

# 使用窗口函数计算排名
df_ranked = df.withColumn("rank", rank().over(window_spec))

# 显示结果
df_ranked.show()

运行以上代码,输出结果如下:

+-------+-----+-----+----+
|   name|score|class|rank|
+-------+-----+-----+----+
|    Bob|   95|    B|   1|
|  Alice|   85|    B|   2|
|Charlie|   75|    B|   3|
|    Bob|   90|    A|   1|
|  Alice|   80|    A|   2|
+-------+-----+-----+----+

在上面的代码中,我们首先使用Window.partitionBy方法指定窗口的分区规则,这里按照"class"列进行分区。然后使用Window.orderBy方法指定窗口的排序规则,这里按照"score"列的

标签:dataframe,聚合,df,Alice,DataFrame,window,score,分组,spark2.4
From: https://blog.51cto.com/u_16175438/6816464

相关文章

  • windows10 安装docker
    如何在Windows10上安装Docker简介在开始之前,我们需要确保你的电脑满足Docker的安装要求。接下来,我将为你提供一步一步的指导,教你如何在Windows10上安装Docker。以下是整个安装过程的步骤概览:步骤动作1检查系统要求2下载DockerDesktop安装程序3......
  • windows redis可视化工具
    如何实现WindowsRedis可视化工具介绍Redis是一个开源的内存数据结构存储系统,常用于缓存、队列和分布式锁等场景。为了方便开发者操作和监控Redis数据库,我们可以使用可视化工具来简化操作流程。本文将教授如何实现一个WindowsRedis可视化工具。整体流程下面是实现WindowsRedi......
  • windows redis安装
    WindowsRedis安装详解Redis是一个开源的、高性能的key-value存储系统,它通常被用作缓存、消息队列和数据库等应用场景中。在Windows操作系统上安装Redis相对于Linux来说稍微复杂一些,但本文将详细介绍Windows上Redis的安装过程,并提供相应的代码示例。1.安装Redis在Windows上安装......
  • windows redis 客户端
    WindowsRedis客户端Redis是一个开源的内存数据结构存储系统,用于存储和检索数据。它可以通过通信协议在客户端和服务器之间进行交互,从而实现高效的数据操作。在Windows操作系统上,我们可以使用各种Redis客户端来与Redis服务器进行通信。本文将介绍一些常见的WindowsRedis客户端以......
  • 内核映射器(KernelMapper)开发-扩展KdMapper在Window 7 x64的支持
    1、背景  内核映射器有较多年历史了,其中KdMapper是比较著名的,原版中它使用intel的驱动漏洞可以无痕的加载未经签名的驱动。只不过当前只支持在Win10及Win11上运行,现在进行功能的修改以支持在Win7x64环境上。当前假定读者对KdMapper的原理比较了解并编译调试过相关代码。 2......
  • Windows签发本地SSL证书
    Windows签发本地SSL证书按顺序使用以下命令行,遇到输入提示请根据状况输入wingetopensslopensslreq-newkeyrsa:2048-nodes-keyoutserver.key-x509-days3650-outserver.ceropensslpkcs12-export-inserver.cer-inkeyserver.key-outserver.pfx将得到的ser......
  • PowerShell命令卸载 Windows系统预装内置软件
    一、【核心命令】 Get-AppxPackage-AllUsers /*获取Win10以上系统(所有用户)预装软件*/ Get-AppxPackage-AllUsers{预装软件全名}|Remove-AppxPackage/*管道方式卸载Win10以上系统预装软件*/ Remove-App......
  • Archlinux+Windows 双系统安装教程(UEFI)2023七月
    前言之前的随笔本人提到过等有时间后写一篇关于manjaro与windows双系统安装的教程,但由于“这样那样的原因”,本人已不再使用manjaro,本人已经切换到archlinux的环境下,故本次的教程将主角换成了archlinux。你需要具备的一些素质1.能够自主地阅读官方文档.,按照本人的教程不代表你......
  • 如何轻松的在windows环境下安装windows+Ubuntu双系统(不需要U盘)
    本文实现windows10安装Ubuntu22.04.2Ubuntu其他版本:清华镜像源wubi其他版本:WubiforUbuntu一、下载安装所需三个文件1.Ubuntu镜像下载方式1:官网下载下载方式2:清华镜像源2.wubi安装Ubuntu图形化界面下载地址:WubiforUbuntu22.04.23.BOOTICE磁盘管理和启动工具下......
  • Windows10 下 Neo4j1.5.8 安装教程
    前言Neo4j是一个高性能的、NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的Java持久化引擎,这里就不把他和常用关系型数据库做对比了。因为篇幅有限,我这里也是第一次使用,所以以下完全是保姆级的安装教程了。 安装步骤1.打开Neo......