Apache Spark 4.0 带来了 PySpark 画图、多态 UDTF、改进的 SQL 脚本和 Python API 更新,以增强实时分析和可用性。 Apache Spark 4.0 于 2025 年发布,它通过增强性能、可访问性和开发者生产力的创新,重新定义了大数据处理。在 Databricks、Apple 和 NVIDIA 等机构的 400 多位开发者的贡献下,Spark 4.0 解决了数千个 JIRA 问题,并引入了诸多变革性功能:PySpark 原生画图、Python 数据源 API、多态用户定义表函数 (UDTF)、状态存储增强、SQL 脚本以及 Spark Connect 改进。本文通过原始示例和图表深入探讨了这些功能、它们的技术基础和实际应用。

1.Apache Spark 的演变

Apache Spark的内存处理性能比 Hadoop MapReduce 快 100 倍,使其成为大数据分析的基石。Spark 4.0 在此基础上引入了优化,增强了查询执行能力,扩展了 Python 的可访问性,并提升了流式传输功能。这些改进使其成为金融、医疗保健和零售等注重可扩展性和实时分析的行业的多功能工具。社区驱动的开发确保 Spark 4.0 能够满足企业需求,同时确保从数据科学家到工程师等各种用户都能轻松使用。

1.1 Spark 4.0 为何如此出色

性能:查询执行和状态管理的优化减少了大规模工作负载的延迟。 可访问性:以 Python 为中心的功能降低了数据工程师和开发人员的门槛。 可扩展性:增强型流媒体支持高吞吐量、实时应用程序。

图片

1.2 PySpark 中的原生画图

Spark 4.0 引入了PySpark DataFrames 的原生画图功能,使用户能够直接在 Spark 中创建直方图、散点图和折线图等可视化效果,而无需使用 matplotlib 等外部库。该功能由 Plotly 作为默认后端提供支持,通过将可视化集成到 Spark 生态系统中,简化了探索性数据分析 (EDA) 流程。它自动处理大型数据集的数据采样或聚合,确保性能和可用性。这对于需要在数据探索过程中快速获取洞察的数据科学家尤为重要,因为它可以减少上下文切换并提高工作流程效率。例如,分析师无需将数据导出到外部工具,即可快速可视化大型数据集中的趋势或异常情况。

1.3 案例

在零售行业,分析师可以将客户购买模式可视化,以识别区域消费差异或季节性趋势,从而能够直接在 Spark 中更快地做出决策。

示例:可视化客户支出

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("CustomerAnalysis").getOrCreate()
data = [(1, 50, "North"), (2, 75, "South"), (3, 60, "East"), (4, 90, "West")]
df = spark.createDataFrame(data, ["id", "spend", "region"])
df.plot(kind="scatter", x="id", y="spend", color="region")

此代码生成按地区划分的客户支出散点图,并使用 Plotly 在 Spark 无缝呈现。

图片

2.Python API

Python 数据源API使 Python 开发人员能够为批处理和流式工作负载创建自定义数据源,无需 Java 或 Scala 专业知识。此功能使数据集成更加民主化,允许团队将 Spark 连接到专有格式、API 或数据库。该 API 提供了一个灵活的框架来定义数据的读取方式,同时支持结构化数据和流式数据,从而增强了 Spark 对现代数据管道的可扩展性。它简化了与外部系统的集成,缩短了以 Python 为中心的团队的开发时间,并支持从自定义数据源实时提取数据,使其成为动态环境的理想选择。

2.1 技术优势

  • 可扩展性:以最小的开销将 Spark 连接到自定义 API 或特定文件格式。

  • 生产力:允许 Python 开发人员使用他们喜欢的语言工作,避免基于 JVM 的编码。

  • 流支持:通过自定义源实现实时数据管道。

案例:自定义 CSV 数据源

from pyspark.sql.datasource import DataSource, DataSourceReader
class CustomCSVSource(DataSource):def name(self):return "custom_csv"def reader(self, schema):return CustomCSVReader(self.options)
class CustomCSVReader(DataSourceReader):def __init__(self, options):self.path = options.get("path")def read(self, spark):return spark.read.csv(self.path, header=True)
spark._jvm.org.apache.spark.sql.execution.datasources.DataSource.registerDataSource("custom_csv", CustomCSVSource)
df = spark.read.format("custom_csv").option("path", "data.csv").load()

此代码定义了一个自定义 CSV 阅读器,演示了 Python 开发人员如何扩展 Spark 的数据连接。

图片

3.多态 Python UDTF

PySpark 中的多态用户定义表函数 (UDTF) 允许基于输入数据动态输出模式,从而为复杂的转换提供灵活性。与具有固定模式的传统 UDF 不同,多态 UDTF 能够动态调整其输出结构,使其成为输出随输入条件变化的场景的理想选择,例如数据解析、条件处理或多输出转换。此功能使开发人员能够在 Spark 中处理各种数据处理需求,从而增强其在高级分析中的实用性。

3.1 案例

在欺诈检测中,UDTF 可以处理交易数据并根据动态标准输出不同的模式(例如,带有风险评分或元数据的标记交易),从而简化实时分析。

示例:动态数据转换

from pyspark.sql.functions import udtf
@udtf(returnType="id: int, result: string")
class DynamicTransformUDTF:def eval(self, row):yield row.id, f"Transformed_{row.value.upper()}"
df = spark.createDataFrame([(1, "data"), (2, "test")], ["id", "value"])
result = df.select(DynamicTransformUDTF("id", "value")).collect()

此 UDTF 将输入字符串转换为带有前缀的大写,展示动态模式处理。

图片

4.状态存储增强功能

Spark 4.0 通过更好地重用静态排序表 (SST) 文件、更智能的快照处理以及整体性能提升,增强了状态流处理能力。这些功能可降低实时应用程序的延迟,并通过增强的日志记录功能改进调试。状态存储可高效管理增量更新,使其适用于实时分析、物联网数据处理或事件驱动系统等应用程序。SST 文件重用可最大限度地减少磁盘 I/O,快照管理可确保容错能力,而详细的日志则可简化故障排除。

4.1 技术优势

  • 效率:SST 文件重用减少了 I/O 开销,加快了状态更新速度。

  • 可靠性:快照管理确保一致的状态恢复。

  • 调试:增强的日志为流操作提供了可操作的见解。

示例:实时销售汇总

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("RealTimeSales").getOrCreate()
stream_df = spark.readStream.format("rate").option("rowsPerSecond", 5).load()
query = stream_df.groupBy("value").count().writeStream \.outputMode("complete").format("console").start()
query.awaitTermination()

这种流聚合利用优化的状态管理来实现低延迟更新。

图片

5.SQL 语言增强功能

Spark 4.0 引入了符合 ANSI SQL/PSM 标准的 SQL 脚本,包括会话变量、控制流和 PIPE 语法。这些功能支持直接在 SQL 中执行复杂的工作流,例如迭代计算或条件逻辑,从而减少对外部脚本语言的依赖。会话变量允许动态状态跟踪,控制流支持循环和分支,PIPE 语法简化了多步骤查询,使 Spark SQL 更适合企业级应用。

5.1 案例

在财务报告中,SQL 脚本可以计算运行总计、应用业务规则或跨数据集聚合数据,而无需离开 Spark SQL 环境,从而提高效率。

示例:收入计算

SET revenue = 0;
FOR row IN (SELECT amount FROM transactions)
DO
SET revenue = revenue + row.amount;
END FOR;
SELECT revenue AS total_revenue;

这使用控制流计算总收入,展示了 SQL 的高级功能。

图片

6.Spark Connect 改进

Spark Connect 的客户端-服务器架构几乎与 Spark Classic 性能相当,支持远程连接和客户端调试。通过将应用程序与 Spark 集群解耦,它支持灵活的部署,例如从轻量级客户端或云环境运行作业。这对于分布式团队或需要低延迟访问 Spark 集群且不依赖大量资源的应用程序来说是理想的选择。

6.1 技术优势

  • 灵活性:远程执行支持多种部署场景。

  • 调试:客户端工具简化错误跟踪和优化。

  • 可扩展性:最小设置可实现分布式环境。

示例:远程数据查询

from pyspark.sql.connect import SparkSession
spark = SparkSession.builder.remote("sc://spark-cluster:15002").getOrCreate()
df = spark.sql("SELECT * FROM customer_data")
df.show()

这连接到远程 Spark 集群,展示了部署灵活性。

图片

7.生产力增强

Spark 4.0 通过错误日志记录、内存分析和直观的 API 增强了开发人员体验。这些功能可减少调试时间、优化资源利用率并简化开发流程,尤其适用于涉及大型数据集或自定义逻辑的复杂管道。

示例:UDF 错误日志记录

from pyspark.sql.functions import udf
@udf("string")
def process_text(text):return text.upper()
df = spark.createDataFrame([("example",)], ["text"]).select(process_text("text"))
spark.sparkContext._jvm.org.apache.spark.util.ErrorLogger.log(df)

这将记录 UDF 的错误,利用 Spark 4.0 的调试工具。

8.行业应用

Spark 4.0 的功能可实现变革性用例:

  1. 金融:通过流媒体增强功能进行实时欺诈检测,每秒处理数百万笔交易。

  2. 医疗保健:使用本机绘图可视化患者数据,以快速了解趋势或异常。

  3. 零售:定制数据源,提供个性化推荐,集成 API 或专有文件等多种数据格式。

未来趋势

Spark 4.0 是 AI 驱动分析、云原生部署以及更深入的 Python 集成的基础。其可扩展性和易用性使其成为大数据处理领域的领导者。开发者可以在 Databricks 社区版上探索 Spark 4.0,以构建下一代数据通道。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机解压软件 7z:高效便捷的解压缩利器

在当今数字化时代,手机已经成为人们生活和工作中不可或缺的工具。随着文件传输和存储需求的不断增加,7z 文件格式因其高效的压缩比而备受青睐。在手机上处理 7z 文件变得越来越重要,合适的解压软件能带来诸多便利。首先,7z 文件格…

闲庭信步使用图像验证平台加速FPGA的开发:第六课——测试图案的FPGA实现

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注…

Solidity——修改状态变量注意事项和简单优化建议

你的问题非常关键,涉及到 Solidity 合约部署时的初始化 gas 成本 和 运行时的存储操作 gas 消耗。我们来详细解答: 🚨 首先,你的代码是非法的: contract MyContract {uint public myNumber;myNumber 1; // ❌ 不允许…

2023年全国青少年信息素养大赛Python编程小学组复赛真题+答案解析-海南赛区

2023年全国青少年信息素养大赛Python编程小学组复赛真题+答案解析-海南赛区 编程题 第1题 整数加8 题目描述 输入一个整数,输出这个整数加8的结果。 输入描述 输入一行一个正整数。 输出描述 输出求和的结果。 样例1 输入: 5 输出: 13 题目解析 这是最基础的输入输出与…

Qt基本组件详解:按钮、输入框与容器控件

Qt基本组件详解:按钮、输入框与容器控件目录 按钮类组件 QPushButtonQRadioButtonQCheckBox 输入框组件 QLineEditQTextEdit 容器组件 QGroupBox 综合应用示例思维导图总结1. 按钮类组件 1.1 QPushButton(普通按钮) 功能:基础交互…

Unity Universal Render Pipeline/Lit光照材质介绍

文章目录前言参数介绍1、表面选项1.1 Worflow Mode工作流模式1.2 Surface Type 表面类型1.3 Blending Mode 混合模式1.4 Preserve Specular 保留镜面光照(高光)1.5 Render Face 渲染面1.6 Alpha Clipping 透明度剪裁1.7 Receive Shadows 是否接收阴影2、…

uni-app ios离线推送,推送后点击推送的链接进入程序后再次回到桌面,无法消除app的角标问题

问题现象: 解决方案: 1、用h5方法清理 h5地址:HTML5 API Reference 废话不多说上代码 /*** 清除应用角标(支持iOS和Android)* 使用H5方法清理推送角标*/clearAppBadge() {// #ifdef APP-PLUStry {plus.runtime.setBad…

迁移Oracle SH 示例 schema 到 PostgreSQL

接着上一篇文章:迁移Oracle HR 示例 schema 到 PostgreSQL中,本文做Oracle SH(Sales History)示例 schema的迁移,SH schema比HR schema更大更复杂,本次迁移的重点是: 分区表外部数据加载 使用…

1.1 ARMv8/ARMv9安全扩展

目录1.1.1 ARM架构安全演进1.1.2 ARMv8安全特性异常级别(EL)安全模型关键安全扩展1.1.3 ARMv9安全创新机密计算架构(CCA)增强的隔离机制1.1.4 安全扩展的TF-A支持1.1.5 安全扩展配置示例1.1.1 ARM架构安全演进 ARM架构从v7到v9的安全演进路线: ARMv7:引…

更新用户隐私协议后还是 ail api scope is not declared in the privacy agreement怎么办??!

saveImageToPhotosAlbum:fail api scope is not declared in the privacy agreement昨天明明可以了,开了个会出来,又不行了,真要命啊啊啊啊啊啊啊啊啊啊(现在回想起来可能是因为我把发布的那个版本删了,因为那个只是用来测试用的e…

练习:对象数组 5

定义一个长度为 3 的数组,数组存储 1~3 名学生对象作为初始数据,学生对象的学号,姓名各不相同。学生的属性:学号,姓名,年龄。要求 1:再次添加一个学生对象,并在添加的时候进行学号的…

Linux 中的 .bashrc 是什么?配置详解

如果你使用过 Linux 终端,那么你很可能接触过 .bashrc 文件。这个功能强大的脚本是个性化命令行环境并使其更高效运行的关键。 在本文中,我们将向你介绍这个文件是什么,在哪里可以找到它,以及如何安全地编辑它。你还将学到一些实…

JVM运行时数据区深度解析

💾 JVM运行时数据区深度解析 文章目录💾 JVM运行时数据区深度解析🎯 引言📚 方法区📋 方法区存储内容🔄 从永久代到元空间的演进永久代时期(JDK 8之前)元空间时期(JDK 8及…

.NET nupkg包的深度解析与安全防护指南

在.NET开发领域,nupkg包是开发者们不可或缺的工具。它不仅是代码分发和资源共享的核心载体,还贯穿了开发、构建、部署的全流程。今天,我们将深入探讨nupkg包的核心功能、打包发布流程以及安全防护措施,帮助你在.NET开发中更加得心…

Cursor 快速入门指南:从安装到核心功能

引言 Cursor 是一款融合 AI 能力的现代代码编辑器,旨在提升开发者的编码效率。本文将带您从零开始,快速掌握 Cursor 的完整使用流程 - 包括安装配置、项目初始化以及核心 AI 功能的应用。 正文 1. 安装与初始配置 1.1 下载与安装 Cursor 支持跨平台…

自然语言处理中probe探测是什么意思。

文章目录🔹 1. 英文单词的基本含义(动词 & 名词)✅ 作为动词(to probe):✅ 作为名词(a probe):🔹 2. 不同领域的具体含义🔹 3. 在机器学习/NL…

【记录】Ubuntu挂载home文件夹到磁盘

问题描述 服务器装好后,home文件夹一般存放各个用户的文件,默认的存储磁盘为系统磁盘,一般比较小,可能几百G,这对于服务器来讲,相当小了,所以需要对home文件夹进行重新调整。 我之前的博文 点击进入 相关配置在重启机器后,磁盘配置自动失效,即配置好后,home在大的磁…

【注意避坑】基于Spring AI 开发本地天气 mcp server,通义灵码测试MCP server连接不稳定,cherry studio连接报错

springboot 版本: 3.5.4 cherry studio版本:1.4.7 通义灵码版本: 2.5.13 文章目录 问题描述:1. 通义灵码添加mcp server ,配置测试2. cherry studio工具添加mcp server ,配置测试 项目源代码:解…

Paimon LSM Tree Compaction 策略

压缩怎么进行的这里的操作都是KValue,内部有row kind,标记了删除和插入MergeTreeCompactManager 是 Paimon 中 Merge-Tree 结构压缩任务的总调度中心。它的核心职责就是监控文件的层级状态(Levels),并在合适的时机&…

小米路由器3C刷OpenWrt,更换系统/变砖恢复 指南

基础篇看这里: 小米路由器3C如何安装OpenWrt官方编译的ROM - 哔哩哔哩 小米路由器 3C 刷入 Breed 和 OpenWrt - Snoopy1866 - 博客园 一、路由器注入 如果按照上面的文章, telnet、ftp一直连接失败,那么可以尝试看 这里: 获取路由器root权…