Python pyspark在远程机器上使用mysql数据库
我在ubuntu中使用Python2.7,并通过使用sparkcontext的python脚本运行spark My db是一个远程mysql,具有用户名和密码 我尝试使用此代码查询它Python pyspark在远程机器上使用mysql数据库,python,mysql,apache-spark,pyspark,pyspark-sql,Python,Mysql,Apache Spark,Pyspark,Pyspark Sql,我在ubuntu中使用Python2.7,并通过使用sparkcontext的python脚本运行spark My db是一个远程mysql,具有用户名和密码 我尝试使用此代码查询它 sc = createSparkContext() sql = SQLContext(sc) df = sql.read.format('jdbc').options(url='jdbc:mysql://ip:port?user=user&password=password', dbtable='(sele
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:调用o32.load时出错。
:java.sql.SQLException:没有合适的驱动程序
我发现我需要mysql的JDBC驱动程序
我从一个免费平台下载了这个平台
我尝试在启动spark上下文时使用此代码包含它
conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
并尝试使用
sudo apt-get install libmysql-java
在主计算机上,在db计算机上,在运行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'),
(你是星火大师,你是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\u home/conf目录中的spark-defaults.conf文件中,如下所示
spark.jars path_2_jar1,path_2_jar2
“/home/tuhin/mysql.jar”是mysql jar文件的位置
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)