实验四 Spark SQL编程初级实践

1 实验目的

(1)通过实验掌握 Spark SQL 的基本编程方法;

(2)熟悉 RDD 到 DataFrame 的转化方法;

(3)熟悉利用 Spark SQL 管理来自不同数据源的数据。

2 实验平台

操作系统: Ubuntu16.04及以上

Spark版本3.4.0

数据库:MySQL

3 实验要求

使用 Spark SQL 向 MySQL 数据库中写入内容。并且再使用 Spark SQL 从 MySQL 数据库中把内容读出。

4 实验内容和步骤(操作结果要附图)

1.准备工作前提安装好mysql,参考教程Ubuntu安装MySQL及常用操作_厦大数据库实验室博客 (xmu.edu.cn)icon-default.png?t=N7T8https://dblab.xmu.edu.cn/blog/1002/

service mysql start   #启动服务
mysql -u root -p   #运行mysql,选择用户然后输入密码

在MySQL数据库中新建数据库spark,再建表student,包含下列两行数据

mysql> create database spark;
mysql> use spark;
mysql> create table student (id int(4), name char(20), gender char(4), age int(4));
mysql> insert into student values(1,'Xueqian','F',23);
mysql> insert into student values(2,'Weiliang','M',24);
mysql> select * from student;

2.读取mysql数据库中的数据

下载MySQL的JDBC驱动程序,比如mysql-connector-java-5.1.40.tar.gz

链接: https://pan.baidu.com/s/1Mv30gzWdk-EpCWqhpj5hng?pwd=1234 提取码: 1234 

把该驱动程序拷贝到spark的安装目录” /usr/local/spark/jars”下

启动一个spark-shell,启动Spark Shell时,必须指定mysql连接驱动jar包

cd /usr/local/spark
./bin/spark-shell \
--jars /usr/local/spark/jars/mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar \
--driver-class-path /usr/local/spark/jars/mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar

执行以下命令连接数据库,读取数据

val jdbcDF = spark.read.format("jdbc").
| option("url","jdbc:mysql://localhost:3306/spark?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useAffectedRows=true&allowMultiQueries=true").
| option("driver","com.mysql.jdbc.Driver").
| option("dbtable", "student").
| option("user", "root").
| option("password", "123456").
| load()

3.向mysql数据库写入数据

现在开始在spark-shell中编写程序,往spark.student表中插入两条记录

import java.util.Properties
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row

// 下面我们设置两条数据表示两个学生信息 
val studentRDD = spark.sparkContext.parallelize(Array("5 zbx M 26","6 Guanhua M 27")).map(_.split(" "))

// 下面要设置模式信息 
val schema = StructType(List(
  StructField("id", IntegerType, true),
  StructField("name", StringType, true),
  StructField("gender", StringType, true),
  StructField("age", IntegerType, true)
))

// 下面创建 Row 对象,每个 Row 对象都是 rowRDD 中的一行 
val rowRDD = studentRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).trim, p(3).toInt))

// 建立起 Row 对象和模式之间的对应关系,也就是把数据和模式对应起来 
val studentDF = spark.createDataFrame(rowRDD, schema)

// 下面创建一个 prop 变量用来保存 JDBC 连接参数 
val prop = new Properties()
prop.put("user", "root") // 表示用户名是 root
prop.put("password", "123456") // 表示密码
prop.put("driver","com.mysql.jdbc.Driver") // 表示驱动程序是 com.mysql.jdbc.Driver

// 下面就可以连接数据库,采用 append 模式,表示追加记录到数据库 spark 的 student 表中 
studentDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/spark?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useAffectedRows=true&allowMultiQueries=true", "spark.student", prop)

命令行可以快速判断哪一行代码发生错误,以便改正,然后一路报绿。

可以看一下效果,看看MySQL数据库中的spark.student表发生了什么变化

select * from student;

5 实验总结

理解Spark SQL的核心概念:首先要理解Spark SQL的核心概念,包括DataFrame、Dataset、SQL查询等。DataFrame是一种分布式的数据集合,可以通过编程接口进行操作;Dataset是对DataFrame的进一步封装,提供了类型安全的API;SQL查询则是使用标准的SQL语句进行数据查询和处理。

数据加载和保存:掌握如何从不同的数据源加载数据,比如从文件系统、Mysql、关系型数据库等加载数据,并且了解如何将处理后的数据保存到不同的数据源。

数据转换和处理:学会使用Spark SQL提供的各种函数和操作来进行数据转换和处理,比如筛选、聚合、排序、连接等操作。

  • 47
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zbxmc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值