Python pyspark在远程机器上使用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

我在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='(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)