news 2026/5/8 16:34:39

头歌Spark SQL 自定义函数(Scala)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
头歌Spark SQL 自定义函数(Scala)

编程要求


打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,根据下列要求,完善程序。

读取本地文件file:///data/bigfiles/test.txt,使用 Spark SQL 对文件的每一行按空格进行切割,切割后按顺序设置别名,分别是name,chinese,math,english。

创建两个自定义函数,将 name 字段中的小写全部转为大写,将 chinese,math,english 字段的值全部相加,设置别名为 total。

按 total 降序输出 name 与 total 字段。

test.txt 文件内容如下:

王小美 80 90 85
张小花 70 85 90
李小刚 88 79 86
赵小甜 79 88 95
何小天 88 86 87
秦小强 75 82 83
注意,输出时表头列的别名分别为 name、total。

测试说明
平台将对你编写的代码进行评测,如果与预期结果一致,则通关,否则测试失败。

答案:

import org.apache.spark.sql.api.java.UDF1 import org.apache.spark.sql.types.{IntegerType, StringType} import org.apache.spark.sql.functions._ import org.apache.spark.sql.{DataFrame, SparkSession} object First_Question { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("First_Question") .master("local[*]") .getOrCreate() /******************* Begin *******************/ // 1. 读取【本地文件】(关键:添加 file:// 前缀,避免访问HDFS) val studentDF: DataFrame = spark.read.text("file:///data/bigfiles/test.txt") .select( split(col("value"), " ")(0).alias("name"), // 姓名 split(col("value"), " ")(1).cast(IntegerType).alias("chinese"), // 语文 split(col("value"), " ")(2).cast(IntegerType).alias("math"), // 数学 split(col("value"), " ")(3).cast(IntegerType).alias("english") // 英语 ) // 2. 自定义函数1:姓名小写转大写 val toUpperUDF = udf((name: String) => name.toUpperCase) // 3. 自定义函数2:三科分数求和 val sumScoreUDF = udf((ch: Int, ma: Int, en: Int) => ch + ma + en) // 4. 应用函数 + 排序 + 输出指定字段 val resultDF = studentDF.select( toUpperUDF(col("name")).alias("name"), sumScoreUDF(col("chinese"), col("math"), col("english")).alias("total") ).orderBy(desc("total")) // 5. 打印结果(匹配预期格式) resultDF.show() /******************* End *******************/ spark.stop() } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 16:34:24

终极指南:3分钟为Windows免费换上macOS风格鼠标指针

终极指南:3分钟为Windows免费换上macOS风格鼠标指针 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.com/gh_mirrors/ma/macOS-…

作者头像 李华
网站建设 2026/5/8 16:34:22

现代Qt开发教程(新手篇)1.13——国际化

现代Qt开发教程(新手篇)1.13——国际化 相关仓库仍然已经开源,正在积极火热的建设之中,欢迎各位大佬提Issue和PR! 链接地址:https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeQt 1. 前…

作者头像 李华
网站建设 2026/5/8 16:34:03

初创公司如何借助Taotoken快速构建多模型AI应用原型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何借助Taotoken快速构建多模型AI应用原型 对于资源有限的初创团队而言,验证一个AI驱动的产品创意&#xff0…

作者头像 李华
网站建设 2026/5/8 16:33:46

Agent团队协作:从临时工到专业团队

subagent就像找来的临时工, 创建——干活——返回摘要——解散,没有身份,没有记忆。 如果有一个复杂的项目,需要一个前端、一个后端、一个测试来协作完成,那么subagent就做不到了。 如果需要干这个活,那么需…

作者头像 李华