我在 ubuntu 中使用 python 2.7,并使用 Sparkcontext 通过 python 脚本运行 Spark
我的数据库是远程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
在主计算机上、在数据库计算机上以及在运行 python 脚本的计算机上,但运气不佳。
编辑2
#我尝试使用
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')]
它包含正确的路径,但我仍然遇到相同的“无驱动程序”错误...
我在这里缺少什么?
谢谢
最佳答案
您需要为驱动程序和工作节点设置类路径。将以下内容添加到 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
关于python - pyspark 在远程机器上使用 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904601/