首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache Spark : JDBC连接不工作

Apache Spark : JDBC连接不工作
EN

Stack Overflow用户
提问于 2015-04-23 19:03:06
回答 6查看 20.4K关注 0票数 11

我以前也问过这个问题,但没有得到任何答案(Not able to connect to postgres using jdbc in pyspark shell)。

我已经成功地在本地windows上安装了Spark 1.3.0,并使用pyspark shell运行了示例程序进行测试。

现在,我想从Mllib对存储在Postgresql中的数据运行关联,但我无法连接到postgresql。

通过运行以下命令,我已经成功地在类路径中添加了所需的jar (测试了这个jar

代码语言:javascript
复制
pyspark --jars "C:\path\to\jar\postgresql-9.2-1002.jdbc3.jar"

我可以看到在环境UI中成功添加了jar。

当我在pyspark shell中运行以下命令时-

代码语言:javascript
复制
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.load(source="jdbc",url="jdbc:postgresql://[host]/[dbname]", dbtable="[schema.table]")  

我得到了这个错误-

代码语言:javascript
复制
>>> df = sqlContext.load(source="jdbc",url="jdbc:postgresql://[host]/[dbname]", dbtable="[schema.table]")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\python\pyspark\sql\context.py", line 482, in load
    df = self._ssql_ctx.load(source, joptions)
  File "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip\py4j\java_gateway.py", line 538, in __call__
  File "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip\py4j\protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o20.load.
: java.sql.SQLException: No suitable driver found for     jdbc:postgresql://[host]/[dbname]
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:94)
        at org.apache.spark.sql.jdbc.JDBCRelation.<init>    (JDBCRelation.scala:125)
        at  org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:114)
        at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:290)
        at org.apache.spark.sql.SQLContext.load(SQLContext.scala:679)
        at org.apache.spark.sql.SQLContext.load(SQLContext.scala:667)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
        at py4j.Gateway.invoke(Gateway.java:259)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:207)
        at java.lang.Thread.run(Thread.java:619)
EN

回答 6

Stack Overflow用户

发布于 2015-06-20 04:52:01

我在mysql/mariadb上遇到了这个问题,并从this question那里得到了很大的线索。

所以你的pyspark命令应该是:

代码语言:javascript
复制
pyspark --conf spark.executor.extraClassPath=<jdbc.jar> --driver-class-path <jdbc.jar> --jars <jdbc.jar> --master <master-URL>

还要注意pyspark启动时出现的错误,比如“警告:本地jar ...不存在,正在跳过”。和"ERROR SparkContext: Jar not found at ...",这可能意味着您拼写了错误的路径。

票数 13
EN

Stack Overflow用户

发布于 2015-12-17 01:26:16

稍微优雅一点的解决方案:

代码语言:javascript
复制
val props = new Properties
props.put("driver", "org.postgresql.Driver")
sqlContext.read.jdbc("jdbc:postgresql://[host]/[dbname]", props)
票数 4
EN

Stack Overflow用户

发布于 2016-09-09 08:14:15

正如jake256建议的那样

“驱动程序”,"org.postgresql.Driver“

缺少键值对。在我的例子中,我启动了pyspark

代码语言:javascript
复制
pyspark --jars /path/to/postgresql-9.4.1210.jar

使用以下说明:

代码语言:javascript
复制
  from pyspark.sql import DataFrameReader

  url = 'postgresql://192.168.2.4:5432/postgres'
  properties = {'user': 'myUser', 'password': 'myPasswd', 'driver': 'org.postgresql.Driver'}
  df = DataFrameReader(sqlContext).jdbc(
      url='jdbc:%s' % url, table='weather', properties=properties
  )
  df.show()

  +-------------+-------+-------+-----------+----------+
  |         city|temp_lo|temp_hi|       prcp|      date|
  +-------------+-------+-------+-----------+----------+
  |San Francisco|     46|     50|       0.25|1994-11-27|
  |San Francisco|     43|     57|        0.0|1994-11-29|
  |      Hayward|     54|     37|0.239999995|1994-11-29|
  +-------------+-------+-------+-----------+----------+

测试对象:

Spark JDK Ubuntu 16.04

  • PostgreSQL服务器版本9.5.

  • Postgresql驱动程序使用的是postgresql-9.4.1210.jar

  • and spark版本是

  • -2.0.0-bin-hadoop2.6

  • ,但我也相信它也可以在JDK1.864位

上运行

其他JDBC驱动程序可以在以下位置找到:https://www.petefreitag.com/articles/jdbc_urls/

我关注的教程在:https://developer.ibm.com/clouddataservices/2015/08/19/speed-your-sql-queries-with-spark-sql/

pyspark mysql jdbc load An error occurred while calling o23.load No suitable driver上也提出了类似的解决方案

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29821518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档