Spark SQL for JDBC 从其他数据库获取数据
Posted
技术标签:
【中文标题】Spark SQL for JDBC 从其他数据库获取数据【英文标题】:Spark SQL for JDBC to fetch data from other database 【发布时间】:2015-03-24 13:59:24 【问题描述】:随着新 spark 1.3 的发布,我很高兴尝试 JDBC 函数(在 Python 中)。但是,由于遇到的错误,我认为此时帮助不是可选的:
这是我所做的:
我从 scala 下的典型 spark shell 开始
SPARK_CLASSPATH=/jdbc_path/some-jdbc-driver.jar bin/spark-shell
结果在 INFO 中:使用--driver-class-path
(我也跟着)
在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 没有此类文件。
请问:
-
在设置额外的外部类时,我如何知道它是否被很好地包含在内?
只是一个简单的 JDBC 链接到其他数据库,有没有 JDBC 的完整示例?
【问题讨论】:
【参考方案1】:您可以通过http://localhost:4040/environment/ 访问 Spark 环境 UI 以检查是否包含 jar。
我也遇到过同样的问题(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。
【讨论】:
以上是关于Spark SQL for JDBC 从其他数据库获取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Bluemix 中将 SQL 数据库加载到 Analytics for Apache Spark?
SPARK SQL - 使用 DataFrames 和 JDBC 更新 MySql 表