使用jdbc从Spark 2.3.1 Scala 2.11.8连接到Vertica

时间:2018-09-22 11:07:37

标签: scala apache-spark jdbc apache-spark-sql vertica

我正在尝试使用jdbc通过Spark v2.3.1 Scala 2.11.8连接到Vertica dB。

在Vertica网站上:https://www.vertica.com/blog/whats-new-vertica-8-1-connector-apache-spark/

它表示我可以在以下位置下载Spark连接器:https://my.vertica.com/download/vertica/8-1-x/

当我单击链接时,它会带我进入登录页面,在我通过登录后,顶部弹出一个黄色框,并说我无权查看该下载内容。

我尝试了另一条路线,这次是从Vertica的下载页面下载。在Linux软件包下,有3个jar文件(vertica-javadoc,vertica-jdbc,vertica-jdbc-8.0.1-0),但是我找不到Vertica-Spark连接器(即:vertica-8.1.0_spark2.0_scala2.11 。罐)。我下载了3个罐子。

在Scala Eclipse IDE中,我加载了3个jar文件(vertica-javadoc,vertica-jdbc,vertica-jdbc-8.0.1-0),并使用以下脚本连接到Vertica:

val url = "jdbc:vertica//hostname/DBName?username=username&password=pw"

val query = "SELECT * FROM TABLE;"

val df = spark.read.format("jdbc")
.option("driver", "com.vertica.jdbc.Driver")
.option("url", url)
.option("dbtable", query)
.load()

并出现以下错误:

Exception in thread "main" java.lang.NullPointerException
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:70)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.<init>(JDBCRelation.scala:115)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:52)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:340)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:239)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:227)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:164)
    at att.com.vert2$.main(vert2.scala:37)
    at att.com.vert2.main(vert2.scala)

我在这里做错了什么?我是否缺少Vertica-Spark连接器?如果是连接器,我可以从哪里下载?

干杯。

1 个答案:

答案 0 :(得分:0)

我找到了问题。

问题出在语法上:

val url = "jdbc:vertica//hostname/DBName?username=username&password=pw"

在vertica和//之间缺少::(冒号)。 从用户名更改为用户。 并在主机名之后添加端口号。

工作语法是:

val url = "jdbc:vertica://hostname:Port/DBName?user=youruser&password=yourpassword"