SparkSQL函数

文章目录

  • 1. SparkSQL函数概述
  • 2. SparkSQL内置函数
    • 2.1 常用内置函数分类
    • 2.2 常用数组函数
      • 2.2.1 array()函数
        • 1. 定义
        • 2. 语法
        • 3. 示例
    • 2.3 常用日期与时间戳函数
    • 2.4 常见聚合函数
    • 2.5 常见窗口函数
  • 3. SparkSQL自定义函数
    • 3.1 自定义函数分类
    • 3.2 自定义函数案例演示
      • 3.2.1 定义自定义函数
      • 3.2.2 使用自定义函数
    • 3.3 自定义函数课堂练习
      • 3.3.1 提出任务
      • 3.3.2 完成任务
        • 1. 准备数据文件
        • 2. 创建Scala对象
        • 3. 运行程序,查看结果
  • 4. 实战小结

1. SparkSQL函数概述

  • Spark SQL 提供了丰富的内置函数,用于数据处理和分析。这些函数包括字符串操作、日期时间处理、数学计算、聚合函数以及窗口函数等。通过使用这些函数,用户可以高效地进行数据转换、过滤和聚合操作。Spark SQL 还支持用户自定义函数(UDF),以满足特定需求。这些函数使得在分布式环境中处理大规模数据变得更加便捷和灵活。

2. SparkSQL内置函数

2.1 常用内置函数分类

在这里插入图片描述

2.2 常用数组函数

2.2.1 array()函数

1. 定义
  • 在 Spark SQL 中,array()函数用于创建一个包含指定元素的数组。该函数接受任意数量的参数,并将它们组合成一个数组。数组中的元素可以是任意类型,包括基本类型和复杂类型。
2. 语法
  • 语法:array(expr1, expr2, ..., exprN)
  • 参数:expr1, expr2, …, exprN:要包含在数组中的元素。这些表达式可以是列名、常量或其他表达式。
  • 返回值:返回一个包含指定元素的数组。
3. 示例
  • 创建包含常量的数组,执行命令:spark.sql("SELECT array(1, 5, 2, 6, 9) AS arr").show()
    在这里插入图片描述
  • 使用列创建数组,执行命令:spark.sql("SELECT array(name, age) AS name_age_arr FROM student").show()
    在这里插入图片描述
  • 创建嵌套数组,执行命令:spark.sql("SELECT array(array(1, 2), array(3, 4)) AS nested_array").show()
    在这里插入图片描述

2.3 常用日期与时间戳函数

2.4 常见聚合函数

2.5 常见窗口函数

3. SparkSQL自定义函数

3.1 自定义函数分类

UDF 函数UDAF 函数UDTF 函数
一进一出(使用广泛)多进一出(使用一般)一进多出(很少使用)

在这里插入图片描述

3.2 自定义函数案例演示

  • 在 Spark SQL 中,你可以使用 UDF(用户定义函数)来扩展 SQL 查询的功能。以下是一个简单的示例,展示如何使用 SparkSQL 自定义函数(UDF)。

3.2.1 定义自定义函数

  • 创建一个自定义函数,用于计算字符串的反转
import org.apache.spark.sql.functions.udf// 定义 UDF 函数:反转字符串
val reverseString = udf((s: String) => s.reverse)// 注册 UDF 函数
spark.udf.register("reverseString", reverseString)
  • 依次执行上述代码
    在这里插入图片描述

3.2.2 使用自定义函数

  • 注册完成后,你可以在 Spark SQL 中使用这个函数。例如,有一个 DataFrame,名为 df,包含一个 name 字段,你希望对每个名字应用反转操作。
val df = Seq(("John"),("Alice"),("Bob")
).toDF("name")// 使用 SQL 语句来调用 UDF 函数
df.createOrReplaceTempView("people")
val result = spark.sql("SELECT name, reverseString(name) AS reversed_name FROM people")// 显示处理结果
result.show()
  • 执行上述代码,查看结果
    在这里插入图片描述

3.3 自定义函数课堂练习

3.3.1 提出任务

  • 要使用SparkSQL自定义函数(UDF)将文本文件中的所有小写英文字母转换为大写字母并打印到控制台

3.3.2 完成任务

1. 准备数据文件
  • 在项目根目录创建data目录
    在这里插入图片描述
  • data里创建words.txt文件
    在这里插入图片描述
hello world hello hadoop
hello scala hello spark
now we are in big data era
we learn hadoop and spark

在这里插入图片描述

2. 创建Scala对象
  • net.huawei.sql里创建UDFToUpperCase对象
    在这里插入图片描述
package net.huawei.sqlimport org.apache.spark.sql.SparkSession/*** 功能:转成大写字母的UDF* 作者:华卫* 日期:2025年01月20日*/
object UDFToUpperCase {def main(args: Array[String]): Unit = {// 获取或创建Spark会话对象val spark = SparkSession.builder() // 创建Builder对象.appName("LoadData") // 设置应用程序名称.master("local[*]") // 运行模式:本地运行.getOrCreate() // 获取或创建Spark会话对象// 读取文本文件val fileDS = spark.read.textFile("data/words.txt")// 注册UDF函数spark.udf.register("udfToUpperCase", (str: String) => str.toUpperCase)// 创建视图fileDS.createOrReplaceTempView("words")// 执行SQL查询,使用UDF函数spark.sql("""|SELECT| value AS word, udfToUpperCase(value) as upper_word|FROM| words|""".stripMargin).show(false)// 关闭会话对象spark.stop()}
}
  • 代码说明:该代码使用SparkSQL实现了一个UDF(用户自定义函数),将文本文件中的小写字母转换为大写字母。首先,创建Spark会话并读取文本文件。然后,注册UDF函数udfToUpperCase,将字符串转换为大写。接着,创建临时视图并执行SQL查询,使用UDF函数转换数据并显示结果。最后,关闭Spark会话。
3. 运行程序,查看结果
  • 运行UDFToUpperCase对象
    在这里插入图片描述

4. 实战小结

  • 在本次实战中,我们深入探讨了SparkSQL的内置函数和自定义函数(UDF)的使用。首先,我们了解了SparkSQL提供的丰富内置函数,包括字符串操作、日期时间处理、数学计算、聚合函数以及窗口函数等。这些内置函数使得数据处理和分析变得更加高效和便捷。例如,我们学习了array()函数的用法,它可以将多个元素组合成一个数组,并支持嵌套数组的创建。

  • 接着,我们重点介绍了SparkSQL的自定义函数(UDF)。通过定义一个将小写字母转换为大写字母的UDF,我们展示了如何在SparkSQL中扩展SQL查询的功能。我们首先创建了一个Spark会话并读取了文本文件,然后注册了UDF函数udfToUpperCase,并使用SQL查询将文本文件中的小写字母转换为大写字母。最后,我们将转换后的结果打印到控制台并关闭了Spark会话。

  • 通过这个实战,我们不仅掌握了如何在SparkSQL中使用UDF,还加深了对Spark数据处理流程的理解。这个案例展示了SparkSQL在数据转换和处理中的强大功能,为处理更复杂的数据任务奠定了基础。此外,我们还学习了如何通过SQL语句与DataFrame API结合使用,进一步提高了数据处理的灵活性和效率。这次实战为我们今后在分布式环境中处理大规模数据提供了宝贵的经验。

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

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

相关文章

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…

ent.SetDatabaseDefaults()

在 AutoCAD 的 .NET API 中,ent.SetDatabaseDefaults() 这句代码通常用于将一个实体(Entity)对象的属性设置为与其所在的数据库(Database)的默认设置相匹配。这意味着,该实体将采用数据库级别的默认颜色、图…

【LeetCode: 215. 数组中的第K个最大元素 + 快速选择排序】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Spring bean加载的顺序探究

目录 前言例子代码和bean顺序改变全注解类加载顺序bean 的依赖关系改变,被依赖的先加载自定义BeanFactoryPostProssort 提前获取某个bean按照refresh的finishBeanFactoryInitialization方法改变beanBeanDefinitionRegistryPostProcessor改变beanDefinitionsConfigur…

React 中hooks之useDeferredValue用法总结

目录 概述基本用法与防抖节流的区别使用场景区分过时内容最佳实践 概述 什么是 useDeferredValue? useDeferredValue 是 React 18 引入的新 Hook,用于延迟更新某个不那么重要的部分。它接收一个值并返回该值的新副本,新副本会延迟更新。这种延迟是有…

【博客之星2024年度总评选】年度回望:我的博客之路与星光熠熠

【个人主页】Francek Chen 【人生格言】征途漫漫,惟有奋斗! 【热门专栏】大数据技术基础 | 数据仓库与数据挖掘 | Python机器学习 文章目录 前言一、个人成长与盘点(一)机缘与开端(二)收获与分享 二、年度创…

R 语言科研绘图第 20 期 --- 箱线图-配对

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…

支持向量机SVM的应用案例

支持向量机(Support Vector Machine,SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面,该超平面能够将不同类别的数据点尽可能分开,并且使离该超平面最近的数…

Ubuntu 24.04 LTS 更改软件源

Ubuntu 24.04 LTS 修改软件源

wps数据分析000002

目录 一、快速定位技巧 二、快速选中技巧 全选 选中部分区域 选中部分区域(升级版) 三、快速移动技巧 四、快速录入技巧 五、总结 一、快速定位技巧 ctrl→(上下左右)快速定位光标对准单元格的上下部分双击名称单元格中…

[gdb调试] gdb调试基础实践gdb指令汇总

​ 一. 参考资料 《C/C代码调试的艺术》 二. 调试过程 1. 编译: 使用Debug模式编译,或者使用Release模式编译加入-g参数,-g选项会在可执行文件中加入调试信息,这些信息包含了程序中的变量名、函数名、行号等,能让…

风吹字符起,诗意Linux:一场指令与自由的浪漫邂逅(上)

文章目录 前言一. 知识过渡文件的属性与类型路径 二. 基本指令ls:风起草长,窥见世界的全貌cd:穿梭路径间,漫步荒原的远方pwd:定位自我,荒原上的坐标mkdir:种下希望,创建属于自己的世…

知识图谱中的word2vec 技术是做什么的?

Word2Vec 是一种将单词转换为向量表示的技术,由 Google 在 2013 年提出。这项技术的核心思想是通过大规模文本数据训练神经网络模型,从而将单词映射到低维稠密的向量空间中。这些向量能够捕捉到单词之间的语义和语法关系,使得相似或相关的单词…

Chrome 132 版本新特性

Chrome 132 版本新特性 一、Chrome 132 版本浏览器更新 1. 在 iOS 上使用 Google Lens 搜索 在 Chrome 132 版本中,开始在所有平台上推出这一功能。 1.1. 更新版本: Chrome 126 在 ChromeOS、Linux、Mac、Windows 上:在 1% 的稳定版用户…

Kafka 日志存储 — 日志索引

每个日志分段文件对应两个索引文件:偏移量索引文件用来建立消息偏移量到物理地址之间的映射;时间戳索引文件根据指定的时间戳来查找对应的偏移量信息。 1 日志索引 Kafka的索引文件以稀疏索引的方式构造消息的索引。它并不保证每个消息在索引文件中都有…

消息队列篇--原理篇--RocketMQ(NameServer,Broker,单机上每秒处理数百万条消息性能)

1、概述 RocketMQ是阿里巴巴开源的一个分布式消息中间件,具有高吞吐量、低延迟和强一致性等特点。它特别适合大规模分布式系统的消息传递,广泛应用于电商、金融、物流等领域的实时数据处理和异步通信。 RocketMQ是用Java语言实现,在设计时参…

简述mysql 主从复制原理及其工作过程,配置一主两从并验证。

MySQL 主从同步是一种数据库复制技术,它通过将主服务器上的数据更改复制到一个或多个从服务器,实现数据的自动同步。 主从同步的核心原理是将主服务器上的二进制日志复制到从服务器,并在从服务器上执行这些日志中的操作。 MySQL主从同步是基…

Web前端开发技术之HTMLCSS知识点总结

学习路线 一、新闻网界面1. 代码示例2. 效果展示3. 知识点总结3.1 HTML标签和字符实体3.2 超链接、颜色描述与标题元素3.3 关于图片和视频标签:3.4 CSS引入方式3.5 CSS选择器优先级 二、flex布局1. 代码示例2. 效果展示3. 知识点总结3.1 span标签和flex容器的区别3.…

内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)

内存故障原因与诊断 您是否曾遇到过电脑无法启动、黑屏、死机,或者系统卡顿的情况?这些问题看起来很复杂,实际上大多数都是内存故障引起的。内存是电脑的核心组成部分之一,任何小东西问题都可能导致系统死机,严重时甚…

vulnhub靶机(ReconForce)

一.信息收集: 使用nmap进行端口扫描,发现其开放了ftp,http,ssh服务 nmap -sS -O -sV -p- 192.168.80.142访问其80端口发现是一个网页,点击TroubleShoot后发现其需要登录 在去尝试使用ftp的匿名登录发现无法执行任何命令,发现了他的欢迎语有点特别 在扫描目录后没有发现什么有…