news 2026/6/9 11:42:57

头歌Scala-Spark SQL 多数据源操作(Scala)(含通关代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
头歌Scala-Spark SQL 多数据源操作(Scala)(含通关代码)

第1关:加载与保存操作

编程要求


打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完善程序。读取本地文件 file:///data/bigfiles/demo.json,根据年龄字段 age 设置降序,输出结果。

demo.json 文件内容如下所示:

{"name": "zhangsan", "age": 20, "sex": "m"},
{"name": "lisi", "age": 21, "sex": "m"},
{"name": "tiantian", "age": 22, "sex": "f"},
{"name": "lihua", "age": 23, "sex": "f"},
{"name": "zhaoliu", "age": 24, "sex": "m"},
{"name": "liguanqing", "age": 25, "sex": "f"},
{"name": "zhangqi", "age": 26, "sex": "m"},
{"name": "zhaoai", "age": 27, "sex": "m"},
{"name": "wangjiu", "age": 28, "sex": "f"}
开始任务前,注意先启动 Hadoop 与 Hive 环境:start-all.sh、nohup hive --service metastore &

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

代码1

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object First_Question { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("First_Question") .master("local[*]") .getOrCreate() /******************* Begin *******************/ // 1. 读取指定路径的JSON文件,生成DataFrame val df: DataFrame = spark.read.json("file:///data/bigfiles/demo.json") // 2. 根据age字段进行降序排序 val sortedDf = df.orderBy(df.col("age").desc) // 3. 输出排序后的结果 sortedDf.show() /******************* End *******************/ spark.stop() } }

祝你通过顺利~

第2关:Parquet 格式文件

编程要求


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

读取本地文件 file:///data/bigfiles/demo.json,使用 Parquet 完成分区,列名为 student=1,保存到本地路径file:///result/下。

读取本地文件 file:///data/bigfiles/demo2.json,使用 Parquet 完成分区,列名为 student=2,保存到本地路径file:///result/下。

demo.json 文件内容如下所示:

{"name": "zhangsan", "age": 20, "sex": "m"},
{"name": "lisi", "age": 21, "sex": "m"},
{"name": "tiantian", "age": 22, "sex": "f"},
{"name": "lihua", "age": 23, "sex": "f"},
{"name": "zhaoliu", "age": 24, "sex": "m"},
{"name": "liguanqing", "age": 25, "sex": "f"},
{"name": "zhangqi", "age": 26, "sex": "m"},
{"name": "zhaoai", "age": 27, "sex": "m"},
{"name": "wangjiu", "age": 28, "sex": "f"}
demo2.json 文件内容如下所示:

{"name": "hongkong", "age": 20, "sex": "m"},
{"name": "kulu", "age": 21, "sex": "m"},
{"name": "huxiaotian", "age": 22, "sex": "f"},
{"name": "yueming", "age": 23, "sex": "f"},
{"name": "wangsan", "age": 24, "sex": "m"},
{"name": "zhaojiu", "age": 25, "sex": "f"},
{"name": "wangqiqi", "age": 26, "sex": "m"},
{"name": "wangxiantian", "age": 27, "sex": "m"},
{"name": "zhaoba", "age": 28, "sex": "f"}
开始任务前,注意先启动 Hadoop 与 Hive 环境:start-all.sh、nohup hive --service metastore &

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

代码2

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object Second_Question { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("Second_Question") .master("local[*]") .getOrCreate() /******************* Begin *******************/ // 1. 读取第一个JSON文件 val df1: DataFrame = spark.read.json("file:///data/bigfiles/demo.json") // 2. 将数据以Parquet格式保存到student=1分区路径,使用覆盖模式避免冲突 df1.write.mode(SaveMode.Overwrite).parquet("file:///result/student=1") // 3. 读取第二个JSON文件 val df2: DataFrame = spark.read.json("file:///data/bigfiles/demo2.json") // 4. 将数据以Parquet格式保存到student=2分区路径,使用覆盖模式 df2.write.mode(SaveMode.Overwrite).parquet("file:///result/student=2") /******************* End *******************/ spark.stop() } }

祝你通过顺利~

第3关:ORC 格式文件

编程要求


根据下列要求,完善程序。

创建 Orc 格式的 Hive 数据表 student,添加字段id(int),name(string),age(int),class(string)。

按顺序插入如下数据:

1001,"王刚",19,"大数据一班"
1002,"李虹",18,"大数据一班"
1003,"张子萱",20,"大数据一班"
1004,"赵云",18,"大数据一班"
1005,"李晓玲",19,"大数据一班"
1006,"张惠",18,"大数据二班"
1007,"秦散",19,"大数据二班"
1008,"王丽",18,"大数据二班"
1009,"田忌",20,"大数据二班"
1010,"张花",18,"大数据二班"
打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,编写 spark sql 程序,读取创建的 student 表并按字段 id 升序输出。
开始任务前,注意先启动 Hadoop 与 Hive 环境:start-all.sh、nohup hive --service metastore &

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

代码3

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object Third_Question { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("Third_Question") .master("local[*]") .enableHiveSupport() .getOrCreate() /******************* Begin *******************/ spark.sql("select * from student").orderBy("id").show() /******************* End *******************/ spark.stop() } }

祝你通过顺利~

第4关:JSON 格式文件

编程要求

打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完善程序。读取本地文件 file:///data/bigfiles/test.json,不改变原数据排列顺序进行输出。

test.json 文件内容如下所示:

{"id":1001,"name":"王刚","age":19,"class":"大数据一班"},
{"id":1002,"name":"李虹","age":18,"class":"大数据一班"},
{"id":1003,"name":"张子萱","age":20,"class":"大数据一班"},
{"id":1004,"name":"赵云","age":18,"class":"大数据一班"},
{"id":1005,"name":"李晓玲","age":19,"class":"大数据一班"},
{"id":1006,"name":"张惠","age":18,"class":"大数据二班"},
{"id":1007,"name":"秦散","age":19,"class":"大数据二班"},
{"id":1008,"name":"王丽","age":18,"class":"大数据二班"},
{"id":1009,"name":"田忌","age":20,"class":"大数据二班"},
{"id":1010,"name":"张花","age":18,"class":"大数据二班"}
开始任务前,注意先启动 Hadoop 与 Hive 环境:start-all.sh、nohup hive --service metastore &

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

代码4

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object Forth_Question { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("Forth_Question") .master("local[*]") .getOrCreate() /******************* Begin *******************/ val dataFrame:DataFrame = spark.read.json("file:///data/bigfiles/test.json") dataFrame.createOrReplaceTempView("data") spark.sql("select id,name,age,class from data").orderBy("id").show() /******************* End *******************/ spark.stop() } }

祝你通过顺利~

第5关:JDBC 操作数据库

编程要求


打开右侧代码文件窗口,在 Begin 至 End 区域补充代码,完善程序。读取本地 csv 文件 file:///data/bigfiles/job58_data.csv(有表头),将加载的数据以覆盖的方式保存到本地 Mysql 数据库的 work.job_data 表中,数据库连接信息如下:

账号:root

密码:123123

端口:3306

注意设置 useSSL=false。

开始任务前,注意先启动 Hadoop 与 Hive 环境:start-all.sh、nohup hive --service metastore &

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

代码5

import org.apache.spark.sql.{DataFrame, SaveMode, SparkSession} object Fifth_Question { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("Fifth_Question") .master("local[*]") .getOrCreate() /******************* Begin *******************/ val dataFrame: DataFrame = spark.read .option("header", "true") .csv("file:///data/bigfiles/job58_data.csv") dataFrame.write .format("jdbc") .option("url", "jdbc:mysql://localhost:3306/work?useSSL=false") .option("driver", "com.mysql.jdbc.Driver") .option("user", "root") .option("password", "123123") .option("dbtable", "job_data") .mode(SaveMode.Overwrite) .save() /******************* End *******************/ spark.stop() } }

祝你通过顺利~

第6关:Hive 表操作

编程要求


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

在 Hive 中创建数据表 employee,添加字段eid(string),ename(string),age(int),part(string)。

插入如下数据:

"A568952","王晓",25,"财务部"
"B256412","张天",28,"人事部"
"C125754","田笑笑",23,"销售部"
"D265412","赵云",24,"研发部"
"F256875","李姿姿",26,"后勤部"
编写 spark sql 程序,直接采用 Spark on Hive 的方式读取创建的 employee 表并按字段 eid 升序输出。
开始任务前,注意先启动 Hadoop 与 Hive 环境:start-all.sh、nohup hive --service metastore &

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

代码6

import org.apache.spark.sql.{DataFrame, SparkSession} object Sixth_Question { def main(args: Array[String]): Unit = { /******************* Begin *******************/ //val spark: SparkSession.builder() val spark: SparkSession = SparkSession.builder() .appName("Sixth_Question") .master("local[*]") .enableHiveSupport() .getOrCreate() val dataFrame : DataFrame = spark.sql("select * from employee order by eid") dataFrame.show() spark.stop() /******************* End *******************/ } }

祝你通过顺利~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 7:43:44

在微服务系统中每个服务都有一个独立的数据库,现有一个方法调用了4个服务A,B,C,D ,其中A,B,C服务只做查询,D服务做更新操作,请问这种场景会有数据一致性问题吗?

1. 场景描述 微服务架构,每个服务有独立数据库(数据库隔离)。一个业务方法(比如一个 API 请求)依次或并发调用 A、B、C、D 四个服务。A、B、C 只做 查询(读操作)。D 做 更新(写操作…

作者头像 李华
网站建设 2026/6/8 0:58:18

Page Assist 2.0:开启浏览器本地AI图文处理新纪元

Page Assist 2.0:开启浏览器本地AI图文处理新纪元 【免费下载链接】page-assist Use your locally running AI models to assist you in your web browsing 项目地址: https://gitcode.com/GitHub_Trending/pa/page-assist 在当今信息爆炸的时代,…

作者头像 李华
网站建设 2026/6/6 3:23:03

希腊塞萨洛尼基大学发现图像修复“中奖彩票“神经网络

这项由希腊塞萨洛尼基大学电气与计算机工程系的Thomas Katraouras和Dimitrios Rafailidis领导的研究发表于2025年的WI-IAT会议,题为《Pruning Overparameterized Multi-Task Networks for Degraded Web Image Restoration》。有兴趣深入了解的读者可以通过arXiv:251…

作者头像 李华
网站建设 2026/6/9 16:16:31

分析题加改错题

文章目录一、程序分析题(20分)项目结构分析题01分析题02分析题03分析题04二、程序改错题(20分)项目结构改错题01改错题02改错题03改错题04改错题05改错题06一、程序分析题(20分) 项目结构 分析题01 运行结果 分析题02 运行结果 分析题03 运行结果 分析题04 运行结果 二、程序改…

作者头像 李华
网站建设 2026/6/9 15:52:13

利用LobeChat镜像实现多租户AI服务分发架构

利用LobeChat镜像实现多租户AI服务分发架构 在企业智能化转型的浪潮中,越来越多组织希望为不同部门、客户或子公司部署专属的AI对话助手。然而,直接使用公有云API构建前端面临开发成本高、维护复杂、数据隔离难等问题;而完全自研又周期长、试…

作者头像 李华
网站建设 2026/6/9 9:26:04

LU, AI人工智能自动记录水迷宫 AI人工智能Barnes迷宫

迷宫作为学习与记忆研究的经典实验工具,应用历史已达数十年,至今仍被广泛采用。其中,电迷宫与食物迷宫虽为常用类型,但实验操作中需把控的细节较多(例如食物迷宫实验要求动物在测试前进行禁食处理)&#xf…

作者头像 李华