【问题标题】:pyspark using mysql database on remote machinepyspark 在远程机器上使用 mysql 数据库
【发布时间】:2017-08-27 11:45:02
【问题描述】:

我正在使用带有 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:调用 o32.load 时出错。 : java.sql.SQLException: 没有合适的驱动程序

我发现我需要 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 脚本但没有运气的机器上。

编辑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')]

它包含正确的路径,但我仍然收到相同的“无驱动程序”错误...

我在这里缺少什么?

谢谢

【问题讨论】:

    标签: python mysql apache-spark pyspark pyspark-sql


    【解决方案1】:

    您需要为驱动程序和工作程序节点设置类路径。将以下内容添加到 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
    

    【讨论】:

      【解决方案2】:
      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文件的位置

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多