【问题标题】:how to load --jars with pyspark with spark standalone on client mode如何在客户端模式下使用 pyspark 和 spark 独立加载 --jars
【发布时间】:2018-02-04 23:07:05
【问题描述】:

我在客户端模式下使用带有 spark 独立集群的 python 2.7。

我想为 mysql 使用 jdbc,发现我需要使用 --jars 参数加载它,我的本地有 jdbc,并设法使用 pyspark 控制台加载它,如 here

当我使用 pyspark 在 ide 中编写 python 脚本时,我无法加载额外的 jar mysql-connector-java-5.1.26.jar 并继续获取

没有合适的司机

错误

在客户端模式下运行 python 脚本、在客户端模式下使用独立集群并引用远程主机时,如何加载其他 jar 文件?

编辑:添加了一些代码######################################### ############################### 这是我正在使用的基本代码,我在 python 中使用 pyspark 和 spark 上下文,例如我不直接使用 spark 提交,也不明白在这种情况下如何使用 spark 提交参数......

def createSparkContext(masterAdress = algoMaster):
    """
    :return: return a spark context that is suitable for my configs 
     note the ip for the master 
     app name is not that important, just to show off 
    """
    from pyspark.mllib.util import MLUtils
    from pyspark import SparkConf
    from pyspark import SparkContext
    import os


    SUBMIT_ARGS = "--driver-class-path /var/nfs/general/mysql-connector-java-5.1.43 pyspark-shell"
    #SUBMIT_ARGS = "--packages com.databricks:spark-csv_2.11:1.2.0 pyspark-shell"
    os.environ["PYSPARK_SUBMIT_ARGS"] = SUBMIT_ARGS
    conf = SparkConf()
    #conf.set("spark.driver.extraClassPath", "var/nfs/general/mysql-connector-java-5.1.43")
    conf.setMaster(masterAdress)
    conf.setAppName('spark-basic')
    conf.set("spark.executor.memory", "2G")
    #conf.set("spark.executor.cores", "4")
    conf.set("spark.driver.memory", "3G")
    conf.set("spark.driver.cores", "3")
    #conf.set("spark.driver.extraClassPath", "/var/nfs/general/mysql-connector-java-5.1.43")
    sc = SparkContext(conf=conf)
    print sc._conf.get("spark.executor.extraClassPath")

    return sc


sql = SQLContext(sc)
df = sql.read.format('jdbc').options(url='jdbc:mysql://ip:port?user=user&password=pass', dbtable='(select * from tablename limit 100) as tablename').load()
print df.head()

谢谢

【问题讨论】:

  • 打印您的 spark 提交以查看您如何使用 --jars 选项请检查我的答案here
  • @RamGhadiyaram 我不使用 spark 提交,我在 python 中使用 spark 上下文。查看编辑,我将添加一些代码供您查看
  • 你能打印sc.getConf().getAll()的输出吗?
  • @Marie [(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-2017083'), (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')]
  • 我已经编辑了我的答案,我相信问题不是来自 .jar 文件

标签: python mysql apache-spark jdbc pyspark


【解决方案1】:

在从 python 创建 sparkContext 时,您的 SUBMIT_ARGS 将被传递给 spark-submit。您应该使用--jars 而不是--driver-class-path

编辑

您的问题实际上比看起来简单得多:您在选项中缺少参数driver

sql = SQLContext(sc)
df = sql.read.format('jdbc').options(
    url='jdbc:mysql://ip:port', 
    user='user',
    password='pass',
    driver="com.mysql.jdbc.Driver",
    dbtable='(select * from tablename limit 100) as tablename'
).load()

您也可以将userpassword放在单独的参数中。

【讨论】:

    猜你喜欢
    • 2019-02-08
    • 2017-07-02
    • 2018-10-21
    • 2019-05-05
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多