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

新手上路,请多包涵

我正在学习 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()

这是错误:

 py4j.protocol.Py4JJavaError: An error occurred while calling o27.load.
: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

原文由 rakesht 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

在撰写本文时 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()

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

原文由 Kondado 发布,翻译遵循 CC BY-SA 4.0 许可协议

在我的电脑上,@Kondado 的解决方案只有在我更改选项中的驱动程序时才有效:

 driver = 'com.mysql.cj.jdbc.Driver'


我在 Windows 上使用 Spark 8.0。我从 这里 下载了 mysql-connector-java-8.0.15.jar, Platform Independent version。并将其复制到 ‘C:\spark-2.4.0-bin-hadoop2.7\jars\’

我在 Pycharm 中的代码如下所示:

 #import findspark # not necessary
#findspark.init() # not necessary
from pyspark import SparkConf, SparkContext, sql
from pyspark.sql import SparkSession
sc = SparkSession.builder.getOrCreate()
sqlContext = sql.SQLContext(sc)
source_df = sqlContext.read.format('jdbc').options(
    url='jdbc:mysql://localhost:3306/database1',
    driver='com.mysql.cj.jdbc.Driver', #com.mysql.jdbc.Driver
    dbtable='table1',
    user='root',
    password='****').load()
print (source_df)
source_df.show()

原文由 Feilong Wang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题