使用Spark SQL读取数据库

1、首先需要安装MySQL,使用以下命令即可进行mysql安装,注意安装前先更新一下软件源以获得最新版本:
sudo apt-get update #更新软件源
sudo apt-get install mysql-server #安装mysql

2、可以用如下命令启动、关闭、重启mysql服务器
service mysql start
service mysql stop
service mysql restart

3、 用启动命令启动MySQL,确认是否启动成功,mysql节点处于LISTEN状态表示启动成功
sudo netstat -tap | grep mysql

这里可能会提示:找不到命令

可以执行如下命令安装:
sudo apt-get install net-tools

然后再运行最上面命令(sudo netstat -tap | grep mysql)即可正常执行:

4、 设置mysql无密码登录以及解决利用sqoop导入MySQL中文乱码的问题(可以插入中文,但不能用sqoop导入中文)
执行如下命令:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]下添加如下两行信息,如下图
skip-grant-tables
character_set_server=utf8

修改完成后保存退出
在终端中执行如下命令重启mysql服务:
service mysql restart
5、 进入mysql shell界面
mysql -u root -p
这里遇到输入密码不用输入直接回车

然后就进入到MySQL shell界面了

6、 然后先修改root密码,依次输入如下两条语句:
flush privileges;

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
这里我将密码设置为了123456,方便后续起见,建议大家也如此设置。

7、 修改完之后按ctrl+D退出mysql,然后执行如下命令:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

将刚才增加的第一行注释掉或删除都可,然后保存退出

8、 然后输入命令 service mysql restart 重启MySQL;
重启完成后输入命令 mysql -u root -p
这里需要输入刚才设置的密码(123456),然后回车进入

9、 在mysql shell界面输入如下语句,查看mysql当前设置的编码,和下图一致即正常
show variables like “char%”;

10、在mysql shell中输入以下SQL语句完成数据库和表的创建
create database spark;
use spark;
create table student (id int(4), name char(20), gender char(4), age int(4));
insert into student values(1,‘Xueqian’,‘F’,23);
insert into student values(2,‘Weiliang’,‘M’,24);
select * from student;

以上语句创建了一个名为spark的数据库,并在该数据库中创建了一个student表,向表里插入了两条记录

11、下载安装MySQL的JDBC驱动程序,这里已将压缩包放到群文件里,请自行下载,并将该压缩包解压到主目录下

12、 然后将解压出来的文件中的jar包放到spark的安装目录” /usr/local/spark/jars”下

13、 Ctrl+D退出刚才的mysql界面,然后在终端中输入如下两条命令启动pyspark:
cd /usr/local/spark

./bin/pyspark

14、 然后在pyspark中输入如下,输入完确认无误后回车:
jdbcDF=spark.read.format(“jdbc”).option(“driver”,“com.mysql.jdbc.Driver”).option(“url”,“jdbc:mysql://localhost:3306/spark”).option(“dbtable”,“student”).option(“user”,“root”).option(“password”,“123456”).load()

15、 然后再输入,输入完后回车:
jdbcDF.show()
可以看到显示了刚才创建的student表,说明连接数据库成功

16、 然后按ctrl+D回到终端,输入如下命令创建一个代码文件InsertStudent.py,向spark.student表中插入两条新记录
cd ~
vim InsertStudent.py

17、 输入如下代码
#!/usr/bin/env python3
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSession
spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()

#下面设置模式信息
schema = StructType([StructField(“id”, IntegerType(), True),
StructField(“name”, StringType(), True),
StructField(“gender”, StringType(), True),
StructField(“age”, IntegerType(), True)])

#下面设置两条数据,表示两个学生的信息
studentRDD = spark
.sparkContext
.parallelize([“3 Rongcheng M 26”,“4 Guanhua M 27”])
.map(lambda x:x.split(" "))

#下面创建Row对象,每个Row对象都是rowRDD中的一行
rowRDD = studentRDD.map(lambda p:Row(int(p[0].strip()), p[1].strip(), p[2].strip(), int(p[3].strip())))

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

#写入数据库
prop = {}
prop[‘user’] = ‘root’
prop[‘password’] = ‘123456’
prop[‘driver’] = “com.mysql.jdbc.Driver”
studentDF.write.jdbc(“jdbc:mysql://localhost:3306/spark”,‘student’,‘append’, prop)

18、 保存并退出后输入如下命令运行该程序:
python3 ~/InsertStudent.py

19、 运行完毕后,输入如下命令进入mysql中查看是否插入数据
mysql -u root -p

20、 进入MySQL后输入如下两条语句:
use spark;
select * from student;

可以看到已经新插入了两条记录

你可能感兴趣的:(其他框架,数据库,spark,sql)