pyspark 在远程机器上使用 mysql 数据库
pyspark using mysql database on remote machine
我正在使用 python 2.7 与 ubuntu 和 运行 spark 通过使用 sparkcontext
的 python 脚本
我的数据库是远程 mysql,有用户名和密码。
我尝试使用此代码查询它
sc = createSparkContext()
sql = SQLContext(sc)
df = sql.read.format('jdbc').options(url='jdbc:mysql://ip:port?user=user&password=password', dbtable='(select * from tablename limit 100) as tablename').load()
print df.head()
并得到这个错误
py4j.protocol.Py4JJavaError: An error occurred while calling o32.load.
: java.sql.SQLException: No suitable driver
我发现 mysql 需要 JDBC 驱动程序。
我从 here
下载了免费的平台
我尝试在启动 spark 上下文时使用此代码包含它
conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
并尝试使用
安装它
sudo apt-get install libmysql-java
在 master 机器上,在 db 机器上,在 运行 机器上,python 脚本没有运气。
edit2
#
我尝试使用
conf.set("spark.executor.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
似乎是
的输出
print sc.getConf().getAll()
也就是
[(u'spark.driver.memory', u'3G'), (u'spark.executor.extraClassPath',
u'file:///var/nfs/general/mysql-connector-java-5.1.43.jar'),
(u'spark.app.name', u'spark-basic'), (u'spark.app.id',
u'app-20170830'), (u'spark.rdd.compress', u'True'),
(u'spark.master', u'spark://127.0.0.1:7077'), (u'spark.driver.port',
u''), (u'spark.serializer.objectStreamReset', u'100'),
(u'spark.executor.memory', u'2G'), (u'spark.executor.id', u'driver'),
(u'spark.submit.deployMode', u'client'), (u'spark.driver.host',
u''), (u'spark.driver.cores', u'3')]
它包含正确的路径,但我仍然得到相同的 "no driver" 错误...
我在这里错过了什么?
谢谢
您需要为驱动程序节点和工作节点设置类路径。将以下内容添加到 spark 配置
conf.set("spark.executor.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
或者您可以使用
传递它
import os
os.environ['SPARK_CLASSPATH'] = "/path/to/driver/mysql.jar"
对于 spark >=2.0.0,您可以将逗号分隔的 jar 列表添加到位于 spark_home/conf 目录中的 spark-defaults.conf 文件中,如下所示
spark.jars path_2_jar1,path_2_jar2
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("Word Count")\
.config("spark.driver.extraClassPath", "/home/tuhin/mysql.jar")\
.getOrCreate()
dataframe_mysql = spark.read\
.format("jdbc")\
.option("url", "jdbc:mysql://ip:port/db_name")\
.option("driver", "com.mysql.jdbc.Driver")\
.option("dbtable", "employees").option("user", "root")\
.option("password", "12345678").load()
print(dataframe_mysql.columns)
"/home/tuhin/mysql.jar" 是 mysql jar 文件的位置
我正在使用 python 2.7 与 ubuntu 和 运行 spark 通过使用 sparkcontext
的 python 脚本我的数据库是远程 mysql,有用户名和密码。
我尝试使用此代码查询它
sc = createSparkContext()
sql = SQLContext(sc)
df = sql.read.format('jdbc').options(url='jdbc:mysql://ip:port?user=user&password=password', dbtable='(select * from tablename limit 100) as tablename').load()
print df.head()
并得到这个错误
py4j.protocol.Py4JJavaError: An error occurred while calling o32.load. : java.sql.SQLException: No suitable driver
我发现 mysql 需要 JDBC 驱动程序。
我从 here
下载了免费的平台我尝试在启动 spark 上下文时使用此代码包含它
conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
并尝试使用
安装它sudo apt-get install libmysql-java
在 master 机器上,在 db 机器上,在 运行 机器上,python 脚本没有运气。
edit2
#我尝试使用
conf.set("spark.executor.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
似乎是
的输出print sc.getConf().getAll()
也就是
[(u'spark.driver.memory', u'3G'), (u'spark.executor.extraClassPath', u'file:///var/nfs/general/mysql-connector-java-5.1.43.jar'), (u'spark.app.name', u'spark-basic'), (u'spark.app.id', u'app-20170830'), (u'spark.rdd.compress', u'True'), (u'spark.master', u'spark://127.0.0.1:7077'), (u'spark.driver.port', u''), (u'spark.serializer.objectStreamReset', u'100'), (u'spark.executor.memory', u'2G'), (u'spark.executor.id', u'driver'), (u'spark.submit.deployMode', u'client'), (u'spark.driver.host', u''), (u'spark.driver.cores', u'3')]
它包含正确的路径,但我仍然得到相同的 "no driver" 错误...
我在这里错过了什么?
谢谢
您需要为驱动程序节点和工作节点设置类路径。将以下内容添加到 spark 配置
conf.set("spark.executor.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
或者您可以使用
传递它import os
os.environ['SPARK_CLASSPATH'] = "/path/to/driver/mysql.jar"
对于 spark >=2.0.0,您可以将逗号分隔的 jar 列表添加到位于 spark_home/conf 目录中的 spark-defaults.conf 文件中,如下所示
spark.jars path_2_jar1,path_2_jar2
from pyspark.sql import SparkSession
spark = SparkSession\
.builder\
.appName("Word Count")\
.config("spark.driver.extraClassPath", "/home/tuhin/mysql.jar")\
.getOrCreate()
dataframe_mysql = spark.read\
.format("jdbc")\
.option("url", "jdbc:mysql://ip:port/db_name")\
.option("driver", "com.mysql.jdbc.Driver")\
.option("dbtable", "employees").option("user", "root")\
.option("password", "12345678").load()
print(dataframe_mysql.columns)
"/home/tuhin/mysql.jar" 是 mysql jar 文件的位置