如何通过PySpark或sparklyr连接本地MySQL数据库?
解决PySpark/sparklyr连接本地MySQL的驱动找不到问题
我之前也踩过一模一样的坑!核心问题就是Spark没找到MySQL的JDBC驱动包,咱们一步步来搞定它:
一、先搞定MySQL JDBC驱动包
这是解决问题的前提,必须先把驱动包准备好:
- 去MySQL官网下载和你本地MySQL版本匹配的JDBC驱动(比如MySQL8.0以上选8.x系列的
mysql-connector-java-8.xx.jar,5.x版本选5.x系列的包) - 推荐把驱动包放到Spark安装目录的
jars文件夹里(比如你的Spark路径是/usr/local/spark,就放到/usr/local/spark/jars/),这样Spark启动时会自动加载这个包,不用每次手动指定 - 如果不想全局配置,也可以在启动Spark时通过参数临时指定驱动包路径
二、PySpark连接MySQL的正确操作
方法1:全局配置驱动(最省心)
已经把驱动包放到Spark的jars目录后,直接写连接代码就行:
from pyspark.sql import SparkSession # 初始化SparkSession spark = SparkSession.builder \ .appName("LocalMySQLConnection") \ .getOrCreate() # 读取MySQL表 mysql_df = spark.read.format("jdbc") \ .option("url", "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC") \ .option("dbtable", "你的目标表名") \ .option("user", "MySQL用户名(比如root)") \ .option("password", "MySQL密码") \ .option("driver", "com.mysql.cj.jdbc.Driver") # 划重点:MySQL8.0+用这个,5.x版本用com.mysql.jdbc.Driver .load() # 验证数据 mysql_df.show()
方法2:临时指定驱动包
如果没放全局jars目录,启动PySpark时带上驱动包参数:
pyspark --jars /你存放驱动的路径/mysql-connector-java-8.0.30.jar
或者在代码里初始化SparkSession时指定:
spark = SparkSession.builder \ .appName("LocalMySQLConnection") \ .config("spark.jars", "/你存放驱动的路径/mysql-connector-java-8.0.30.jar") \ .getOrCreate()
PySpark常见坑排查
- 驱动类名别写错:MySQL8.0及以后必须用
com.mysql.cj.jdbc.Driver,旧的com.mysql.jdbc.Driver会直接报找不到类 - URL里必须加时区参数
serverTimezone=UTC,不然会出现时区不兼容的报错 - 先确认本地MySQL服务是启动的,用
mysql -u用户名 -p能正常登录,避免是MySQL本身的连接问题
三、sparklyr连接MySQL的正确操作
方法1:全局配置驱动(推荐)
驱动包已经放到Spark的jars目录后,直接用spark_read_jdbc连接:
library(sparklyr) # 连接本地Spark sc <- spark_connect(master = "local") # 读取MySQL数据 mysql_df <- spark_read_jdbc( sc, name = "自定义表名", options = list( url = "jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC", dbtable = "你的目标表名", user = "MySQL用户名", password = "MySQL密码", driver = "com.mysql.cj.jdbc.Driver" # 同样注意版本对应的驱动类 ) ) # 查看数据 print(mysql_df)
方法2:临时指定驱动包
如果没全局配置,在spark_connect时指定驱动包路径:
sc <- spark_connect( master = "local", config = spark_config() %>% config_option("spark.jars", "/你存放驱动的路径/mysql-connector-java-8.0.30.jar") )
sparklyr常见坑排查
- 确保sparklyr关联的Spark版本和驱动包兼容(比如Spark3.x搭配MySQL8.x驱动没问题)
- 如果之前有残留的Spark连接,先断开再重新连:
spark_disconnect(sc) - 检查你的
.profile或.bash_profile里的SPARK_HOME是否正确设置,确保sparklyr能找到Spark的安装路径
四、额外排查小技巧
- 验证驱动包是否正确:打开下载的jar包,查看里面是否有对应版本的Driver类(比如8.x驱动里有
com/mysql/cj/jdbc/Driver.class),没有的话就是下错包了 - 确认MySQL端口:默认是3306,如果改了端口,一定要在URL里改成对应端口
- 测试本地MySQL连接:先用原生MySQL客户端登录,确认目标数据库和表存在,排除MySQL本身的问题
内容的提问来源于stack exchange,提问作者lpt
相关产品推荐
相关产品推荐

