PySpark调用o50.load报MySQL通信链路故障,缺哪些依赖需装本地MySQL吗?
不需要安装本地MySQL服务器,你连接的是远程MySQL实例,本地仅需配置对应驱动即可,Communications link failure是通信链路异常,可按以下顺序排查:
- 首先验证远程MySQL可达性
你已经安装了MySQL Workbench,直接填入你代码中使用的远程数据库地址、端口、账号、密码测试连接:- 若Workbench无法连接,说明是网络或远程库配置问题:检查远程服务器防火墙是否放开MySQL默认端口3306、确认你使用的数据库账号是否允许当前访问IP登录、检查JDBC URL格式是否正确,标准格式为
jdbc:mysql://<远程域名/IP>:<端口>/<数据库名>?useSSL=false&serverTimezone=UTC,注意不要遗漏时区、SSL相关参数,否则高版本MySQL会直接拒绝连接 - 若Workbench可以连接,说明问题出在Spark运行环境配置
- 若Workbench无法连接,说明是网络或远程库配置问题:检查远程服务器防火墙是否放开MySQL默认端口3306、确认你使用的数据库账号是否允许当前访问IP登录、检查JDBC URL格式是否正确,标准格式为
- 检查Spark驱动配置
- 确认你安装的MySQL connector版本和远程MySQL版本匹配:MySQL 8.0+版本需要使用
com.mysql.cj.jdbc.Driver驱动类,你当前代码中写的com.mysql.jdbc.Driver是5.x版本的驱动类,版本不匹配会直接触发连接异常 - 确认MySQL connector的jar包已经被Spark正确加载,你可以在初始化Spark时显式指定驱动路径,参考写法如下:
import findspark findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder \ .config("spark.jars", "替换为你的mysql-connector-java.jar本地路径") \ .appName("MySQLConnectTest") \ .getOrCreate()
findspark.init缺少括号,会导致spark环境初始化失败,也是可能的诱因。 - 确认你安装的MySQL connector版本和远程MySQL版本匹配:MySQL 8.0+版本需要使用
- 代码优化建议
Spark 2.0之后已经推荐使用SparkSession统一入口代替旧的SparkContext+SQLContext写法,旧API在高版本Spark中存在兼容性问题,建议替换后再测试连接。
内容的提问来源于stack exchange,提问作者grace
相关产品推荐
相关产品推荐

