无法从 pyspark 连接到 Mysql 数据库,出现 jdbc 错误

rak*_*sht 6 mysql jdbc python-3.x apache-spark-sql pyspark-sql

我正在学习 pyspark,并尝试连接到 mysql 数据库。

但是我java.lang.ClassNotFoundException: com.mysql.jdbc.Driver在运行代码时遇到异常。我花了一整天试图修复它,任何帮助将不胜感激:)

我正在使用带有 anaconda 和 python 3.6.3 的 pycharm 社区版

这是我的代码:

from pyspark import SparkContext,SQLContext
sc= SparkContext()
sqlContext= SQLContext(sc)

df = sqlContext.read.format("jdbc").options(
url ="jdbc:mysql://192.168.0.11:3306/my_db_name",
driver = "com.mysql.jdbc.Driver",
dbtable = "billing",
user="root",
password="root").load()
Run Code Online (Sandbox Code Playgroud)

这是错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o27.load.
: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Run Code Online (Sandbox Code Playgroud)

小智 12

在撰写本文时 9 个月前有人问过这个问题,但由于没有答案,所以就这样了。我遇到了同样的情况,一遍又一遍地搜索 stackoverflow,尝试了不同的建议,但最终答案非常简单:您只需要将 MySQL 驱动程序复制到 Spark 的“jars”文件夹中!

在这里下载https://dev.mysql.com/downloads/connector/j/5.1.html

我使用的是 5.1 版本,虽然 8.0 存在,但是在使用 Spark 2.3.2 运行最新版本时我遇到了一些其他问题(在 Windows 10 上运行 Spark 2.4 也有其他问题)。

下载后,您只需将其复制到 Spark 文件夹 E:\spark232_hadoop27\jars\(使用您自己的驱动器:\folder_name - 这只是一个示例)

你应该有两个文件: E:\spark232_hadoop27\jars\mysql-connector-java-5.1.47-bin.jar E:\spark232_hadoop27\jars\mysql-connector-java-5.1.47.jar

之后,通过 pyCharm 或 jupyter notebook 启动的以下代码应该可以工作(只要您设置了 MySQL 数据库):

import findspark
findspark.init()

import pyspark # only run after findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

dataframe_mysql = spark.read.format("jdbc").options(
    url="jdbc:mysql://localhost:3306/uoc2",
    driver = "com.mysql.jdbc.Driver",
    dbtable = "company",
    user="root",
    password="password").load()

dataframe_mysql.show()
Run Code Online (Sandbox Code Playgroud)

请记住,我目前正在本地使用我的 Spark 设置工作,因此不涉及真正的集群,也没有提交到此类集群的“生产”类型的代码。对于更详细的内容,此答案可能会有所帮助:MySQL read with PySpark