我正在学习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
在写作时,这是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.jarE: spark232_hadoop27 jars mysql-connector-java-5.1.47.jar
之后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使用pyspark
在我的计算机上,@kondado的解决方案仅在我在选项中更改驱动程序时起作用:
driver = 'com.mysql.cj.jdbc.Driver'
我在Windows上使用Spark 8.0。我下载了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 file添加到classpath(有人可以告诉我如何?(
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版本是1.7.0_191
pyspark版本是2.1.2
下载以下JAR文件
sqljdbc41.jar
mssql-jdbc-6.2.2.2.2.2.jre7.jar
在虚拟环境中粘贴上述罐子内部的罐子夹
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()