尝试将spark-shell(在docker容器内)连接到PostgreSQL数据库

时间:2016-06-06 10:00:39

标签: postgresql shell apache-spark docker

我在Docker容器(sequenceiq/spark)上运行Spark 我这样推出了它:

docker run --link dbHost:dbHost  -v my/path/to/postgres/jar:postgres/ -it -h sandbox sequenceiq/spark:1.6.0 bash

我确信可以通过地址postgresql://user:password@localhost:5432/ticketapp访问postgreSQL数据库。

我用spark-shell --jars postgres/postgresql-9.4-1205.jdbc42.jar启动spark-shell,因为我可以从我的Play连接!具有依赖性"org.postgresql" % "postgresql" % "9.4-1205-jdbc42"的应用程序似乎我有正确的jar。 (我也没有任何警告说当地的罐子不存在。)

但是当我尝试使用以下命令连接到我的数据库时

val jdbcDF = sqlContext.read.format("jdbc").options(
  Map("url" -> "jdbc:postgresql://dbHost:5432/ticketapp?user=user&password=password", 
    "dbtable" -> "events")
  ).load()

(我也尝试了网址jdbc:postgresql://user:root@dbHost:5432/ticketapp

正如在spark文档中解释的那样,我收到此错误: java.sql.SQLException:没有为jdbc找到合适的驱动程序:postgresql:// dbHost:5432 / ticketapp?user = simon& password = root

我做错了什么?

1 个答案:

答案 0 :(得分:0)

据我所知,您需要在spark类路径中为特定数据库包含JDBC驱动程序。根据文档(https://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases),应该这样做:

SPARK_CLASSPATH=postgresql-9.3-1102-jdbc41.jar bin/spark-shell