linux 通过JDBC连接数据库,使用Spark读写MySql数据库的数据(2021-10-3)

一、在mysql建立数据库和表

1.启动mysql

[ root@hadoop00 mysql5.7]#service mysql start
[ root@hadoop00 mysql5.7]#./bin/mysql -u root -p   #启动mysql

2.建立数据库和表

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

结果:
在这里插入图片描述

二、下载mysql的jdbc驱动

1.wget+对应版本下载地址 下载驱动包
mysql的jdbc驱动包下载地址

wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-8.0.26.tar.gz

在这里插入图片描述
2.解压包,移动到spark的jars目录下

tar -zvxf mysql-connector-java-8.0.26.tar.gz
cp -r mysql-connector-java-8.0.26 /usr/local/spark3.1/jars

查看:在这里插入图片描述

三、启动pyspark,连接数据库,读写数据

1.启动pyspark,附加如下参数。
因为启动pyspark时,必须指定mysql连接驱动jar包(如果你前面已经采用下面方式启动了pyspark,就不需要重复启动了)。\表示换行。因为之前设置了SPARK_PATH环境变量,可以在全局输入pyspark启动,不需要进入bin目录。

pyspark \
--jars /usr/local/spark/jars/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar \
--driver-class-path  /usr/local/spark/jars/mysql-connector-java-8.0.26/mysql-connector-java-8.0.26.jar

过程:
在这里插入图片描述
2.通过spark.read.format(“jdbc”).option().option()…操作通过JDBC连接MySql数据库时。

jdbcDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/spark").option("driver","com.mysql.cj.jdbc.Driver").option("dbtable", "student").option("user", "root").option("password", "123456").load()
jdbcDF.show()

结果如图:
在这里插入图片描述
在pyspark中执行如下命令对数据进行读写:

from pyspark.sql.types import Row
from pyspark.sql.types import StructType
from pyspark.sql.types import StructField
from pyspark.sql.types import StringType
from pyspark.sql.types import IntegerType
studentRDD = spark.sparkContext.parallelize(["3 Rongcheng M 26","4 Guanhua M 27"]).map(lambda line : line.split(" "))
//下面要设置模式信息
schema = StructType([StructField("name", StringType(), True),StructField("gender", StringType(), True),StructField("age",IntegerType(), True)])
rowRDD = studentRDD.map(lambda p : Row(p[1].strip(), p[2].strip(),int(p[3])))
//建立起Row对象和模式之间的对应关系,也就是把数据和模式对应起来
studentDF = spark.createDataFrame(rowRDD, schema)
prop = {}
prop['user'] = 'root'
prop['password'] = '123456'
prop['driver'] = "com.mysql.cj.jdbc.Driver"
studentDF.write.jdbc("jdbc:mysql://localhost:3306/spark",'student','append', prop)

其中参数:

参数名称含义
url数据库的连接地址,如:jdbc:mysql://localhost:3306/spark(最后为数据库名)
Driver数据库的驱动程序,如:com.mysql.cj.jdbc.Driver
dbtable需要访问的表名
user数据库用户名
password数据库用户密码

过程:
在这里插入图片描述

在mysql中查看:
在这里插入图片描述
四、参考
1、驱动包下载和安装
Spark2.1.0入门:通过JDBC连接数据库(DataFrame)(Python版)
2、数据库连接
centos7下载spark连接mysql数据库提取数据(pyspark,Scala,python独立执行)
3、java、驱动包版本和mysql对应关系
mysql-connector-java与mysql版本的对应关系

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark SQL可以通过JDBC连接MySQL数据库,实现读写数据的操作。 具体步骤如下: 1. 在Spark应用程序中,引入MySQL JDBC驱动程序。 2. 使用SparkSession对象创建一个DataFrame,指定MySQL数据库连接信息和查询语句。 3. 使用DataFrame的API进行数据读取或写入操作。 例如,以下代码演示了如何使用Spark SQL通过JDBC连接MySQL数据库读取数据: ``` import org.apache.spark.sql.SparkSession object SparkSQLJDBCExample { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("Spark SQL JDBC Example") .master("local[*]") .getOrCreate() val jdbcDF = spark.read .format("jdbc") .option("url", "jdbc:mysql://localhost:3306/test") .option("driver", "com.mysql.jdbc.Driver") .option("dbtable", "employee") .option("user", "root") .option("password", "password") .load() jdbcDF.show() spark.stop() } } ``` 在这个例子中,我们使用SparkSession对象创建了一个DataFrame,通过JDBC连接MySQL数据库,读取了employee表中的数据,并使用show()方法展示了数据。 类似地,我们也可以使用DataFrame的API进行数据写入操作,例如: ``` jdbcDF.write .format("jdbc") .option("url", "jdbc:mysql://localhost:3306/test") .option("driver", "com.mysql.jdbc.Driver") .option("dbtable", "employee_copy") .option("user", "root") .option("password", "password") .save() ``` 这段代码将DataFrame中的数据写入到MySQL数据库的employee_copy表中。 总之,Spark SQL通过JDBC连接MySQL数据库,可以方便地实现数据读写操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值