无法从 pyspark 连接到 Mysql 数据库,出现 jdbc 错误
Cant connect to Mysql database from pyspark, getting jdbc error
我正在学习 pyspark,并尝试连接到 mysql 数据库。
但是我在 运行 代码时遇到 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
异常。我花了一整天试图修复它,任何帮助将不胜感激:)
我正在使用 pycharm 社区版与 anaconda 和 python 3.6.3
这是我的代码:
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
在撰写本文时 9 个月前有人问过这个问题,但由于没有答案,所以就这样了。我遇到了同样的情况,一遍又一遍地搜索 Whosebug,尝试了不同的建议,但最终的答案非常简单:你只需将 MySQL 驱动程序复制到 Spark 的 "jars" 文件夹中!
在此处下载https://dev.mysql.com/downloads/connector/j/5.1.html
我使用的是 5.1 版本,虽然存在 8.0,但是当 运行 最新版本的 Spark 2.3.2 时我遇到了一些其他问题(也有其他问题 运行 Spark 2.4 on Windows10).
下载后,您只需将其复制到您的 Spark 文件夹中即可
E:\spark232_hadoop27\jars\(使用你自己的驱动器:\folder_name -- 这只是一个例子)
您应该有两个文件:
E:\spark232_hadoop27\jars\mysql-连接器-java-5.1.47-bin.jar
E:\spark232_hadoop27\jars\mysql-连接器-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 设置,因此没有涉及真正的集群,也没有 "production" 种代码提交到这样的集群。对于更详细的内容,此答案可能会有所帮助:
在我的电脑上,@Kondado 的解决方案只有在我更改选项中的驱动程序时才有效:
driver = 'com.mysql.cj.jdbc.Driver'
我在 Windows 上使用 Spark 8.0。我从 here 下载了 mysql-connector-java-8.0.15.jar,独立于平台的版本。并将其复制到 '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()
我不知道如何将 jar 文件添加到 ClassPath(有人可以告诉我怎么做吗??)所以我将它放在 SparkSession 配置中并且它工作正常。
spark = SparkSession \
.builder \
.appName('test') \
.master('local[*]') \
.enableHiveSupport() \
.config("spark.driver.extraClassPath", "<path to mysql-connector-java-5.1.49-bin.jar>") \
.getOrCreate()
df = spark.read.format("jdbc").option("url","jdbc:mysql://localhost/<database_name>").option("driver","com.mysql.jdbc.Driver").option("dbtable",<table_name>).option("user",<user>).option("password",<password>).load()
df.show()
这对我有用,pyspark 和 mssql
java version is 1.7.0_191
pyspark version is 2.1.2
下载以下jar文件
sqljdbc41.jar
mssql-jdbc-6.2.2.jre7.jar
将上述jar包粘贴到虚拟环境的jars文件夹中
test_env/lib/python3.6/site-packages/pyspark/jars
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Practise').getOrCreate()
url = 'jdbc:sqlserver://your_host_name:your_port;databaseName=YOUR_DATABASE_NAME;useNTLMV2=true;'
df = spark.read.format('jdbc'
).option('url', url
).option('user', 'your_db_username'
).option('password','your_db_password'
).option('dbtable', 'YOUR_TABLE_NAME'
).option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
).load()
我正在学习 pyspark,并尝试连接到 mysql 数据库。
但是我在 运行 代码时遇到 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
异常。我花了一整天试图修复它,任何帮助将不胜感激:)
我正在使用 pycharm 社区版与 anaconda 和 python 3.6.3
这是我的代码:
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
在撰写本文时 9 个月前有人问过这个问题,但由于没有答案,所以就这样了。我遇到了同样的情况,一遍又一遍地搜索 Whosebug,尝试了不同的建议,但最终的答案非常简单:你只需将 MySQL 驱动程序复制到 Spark 的 "jars" 文件夹中!
在此处下载https://dev.mysql.com/downloads/connector/j/5.1.html
我使用的是 5.1 版本,虽然存在 8.0,但是当 运行 最新版本的 Spark 2.3.2 时我遇到了一些其他问题(也有其他问题 运行 Spark 2.4 on Windows10).
下载后,您只需将其复制到您的 Spark 文件夹中即可 E:\spark232_hadoop27\jars\(使用你自己的驱动器:\folder_name -- 这只是一个例子)
您应该有两个文件: E:\spark232_hadoop27\jars\mysql-连接器-java-5.1.47-bin.jar E:\spark232_hadoop27\jars\mysql-连接器-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 设置,因此没有涉及真正的集群,也没有 "production" 种代码提交到这样的集群。对于更详细的内容,此答案可能会有所帮助:
在我的电脑上,@Kondado 的解决方案只有在我更改选项中的驱动程序时才有效:
driver = 'com.mysql.cj.jdbc.Driver'
我在 Windows 上使用 Spark 8.0。我从 here 下载了 mysql-connector-java-8.0.15.jar,独立于平台的版本。并将其复制到 '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()
我不知道如何将 jar 文件添加到 ClassPath(有人可以告诉我怎么做吗??)所以我将它放在 SparkSession 配置中并且它工作正常。
spark = SparkSession \
.builder \
.appName('test') \
.master('local[*]') \
.enableHiveSupport() \
.config("spark.driver.extraClassPath", "<path to mysql-connector-java-5.1.49-bin.jar>") \
.getOrCreate()
df = spark.read.format("jdbc").option("url","jdbc:mysql://localhost/<database_name>").option("driver","com.mysql.jdbc.Driver").option("dbtable",<table_name>).option("user",<user>).option("password",<password>).load()
df.show()
这对我有用,pyspark 和 mssql
java version is 1.7.0_191
pyspark version is 2.1.2
下载以下jar文件
sqljdbc41.jar
mssql-jdbc-6.2.2.jre7.jar
将上述jar包粘贴到虚拟环境的jars文件夹中
test_env/lib/python3.6/site-packages/pyspark/jars
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Practise').getOrCreate()
url = 'jdbc:sqlserver://your_host_name:your_port;databaseName=YOUR_DATABASE_NAME;useNTLMV2=true;'
df = spark.read.format('jdbc'
).option('url', url
).option('user', 'your_db_username'
).option('password','your_db_password'
).option('dbtable', 'YOUR_TABLE_NAME'
).option('driver', 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
).load()