本地命令行状态下执行pyspark使用SQL数据源发生报错:
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
这里提示没有对应的SQL驱动,需要下载对应对应的驱动程序并在pyspark启动时将对应的路径传入才可以。
这里梳理下本地部署MySQL服务和SQLite服务,并连接对应的驱动程序过程。
MySQL
MySQL下载
官网地址:https://www.mysql.com/
下载地址:https://dev.mysql.com/downloads/installer/
下载安装完成后,可添加MySQL Server 8.0下的bin目录到环境变量。
MySQL服务的启动和停止
- 方式一:可以通过“计算机管理”中的“服务”,找到mysql对应的服务名,进行手动开启
- 方式二:通过cmd命令行启动(管理员身份运行)
// 启动服务
net start servicename
// 停止服务
net stop servicename
MySQL服务的登录和退出
- 方式一:通过mysql自带的Command Line Client,但该方式只限于root用户使用
- 方式二:通过windows自带的cmd登陆
// 登陆
mysql [-h hostname -P portnumber] -u username -ppassword
// 退出
exit;
- 登陆时若密码和命令在一行,最后的-p与password之间不能有空格
- 若是本地用户,通过端口号3306登陆,则可以省略主机名和端口号
- 在使用windows自带的cmd登陆之前需要配置mysql的环境变量,将安装目录中的mysql.exe添加到path中
MySQL驱动下载
地址:https://dev.mysql.com/downloads/
选择JAVA对应的驱动Connector/J即可。
SQLite
SQLite下载
直接解压即可,可添加解压目录到环境变量。
SQLite登录
SQLite使用较为简单,添加完环境变量后,直接运行即可:
// 登陆
sqlite3
// 退出
.exit
// 或者
.quit
SQLite可视化客户端
SQLiteStudio:SQLiteStudio
还有其它工具可以自行尝试下载使用:
- 免费工具
- DB Browser for SQLite
- SQLiteStudio
- SQLite Expert
- SQLiteGUI
- Antares SQL
- DbGate
- SQLite Viewer Web App
- CuteSqlite
- 付费工具
- SQLiteFlow
- SQLPro for SQLite
- Navicat for SQLite
SQLite驱动下载
地址:https://github.com/xerial/sqlite-jdbc
Spark设置SQL驱动
命令行模式
直接添加--jars参数即可:
pyspark --jars .\SQLite\sqlite-jdbc-3.50.1.0.jar, .\mysql-connector-java-8.0.26\mysql-connector-java-8.0.26.jar
然后在读取SQL数据源时,设置driver:
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/myDB"
user = "user"
password = "password"
tablename = "table"
df = spark.read.format("jdbc").option("url", url).option("dbtable", tablename).option("driver", driver).option("user", user).option("password", password ).load()
代码设置
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("demo").config("spark.jars", r".\mysql-connector-java-8.0.26\mysql-connector-java-8.0.26.jar").getOrCreate()
driver = "com.mysql.cj.jdbc.Driver"
url = "jdbc:mysql://localhost:3306/myDB"
user = "user"
password = "password"
tablename = "table"
df = spark.read.format("jdbc").option("url", url).option("dbtable", tablename).option("driver", driver).option("user", user).option("password", password ).load()
df.show()