【问题标题】:Spark SQL for JDBC to fetch data from other databaseSpark SQL for JDBC 从其他数据库获取数据
【发布时间】:2015-03-24 13:59:24
【问题描述】:

随着新 spark 1.3 的发布,我很高兴尝试 JDBC 函数(在 Python 中)。但是,由于遇到的错误,我认为此时帮助不是可选的:

这是我所做的:

  1. 我从 scala 下的典型 spark shell 开始

    SPARK_CLASSPATH=/jdbc_path/some-jdbc-driver.jar bin/spark-shell
    

    结果在 INFO 中:使用--driver-class-path(我也跟着)

  2. 在PySpark REPEL中,导入了相关包,我使用了

    df2 = sqlCtx.load("jdbc", url="jdbc:ncluster://serveraddress:2406/database?user=myid&password=mypass", driver="com.asterdata.ncluster.Driver", dbtable="mytable")
    

但错误消息一直显示 spark_home/jdbc 没有此类文件。

请问:

  1. 在设置额外的外部类时,我如何知道它是否被很好地包含在内?
  2. 只是一个简单的 JDBC 链接到其他数据库,有没有 JDBC 的完整示例?

【问题讨论】:

    标签: python jdbc apache-spark


    【解决方案1】:
    1. 您可以通过http://localhost:4040/environment/ 访问 Spark 环境 UI 以检查是否包含 jar。

    2. 我也遇到过同样的问题(2),试试:

      df2 = sqlCtx.load(source="jdbc", url="jdbc:ncluster://serveraddress:2406/database?user=myid&password=mypass", driver="com.asterdata.ncluster.Driver", dbtable="mytable")
      

    让我知道它是否有效。就我而言,它有效,但我仍然无法与我的数据库建立连接,因为 spark 无法识别我的 jar 文件。这听起来很奇怪,但它正在以某种方式发生。

    如果你能连接,请告诉我。

    【讨论】:

    • 嗨!我正在做类似的事情。 sqlCtx.load() 和 sqlContext.load() 有什么区别?一个只是别名吗?
    • 没有区别,sqlCtx & sqlContext 都是一样的。只是变量名不同。
    【解决方案2】:

    不要设置 SPARK_CLASSPATH(至少在 Spark 1.5.2 上表示已弃用),请尝试关注 this answer 并编辑 conf/spark-defaults.conf 在下面添加两行。

    spark.driver.extraClassPath /path/to/my.jar
    spark.executor.extraClassPath /path/to/my.jar
    

    我不需要使用--driver-class-path,因为默认情况下会在 Spark 启动时加载 jar。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多