无法从 Spark 显示 Vertica 表

Posted

技术标签:

【中文标题】无法从 Spark 显示 Vertica 表【英文标题】:Unable to display Vertica tables from Spark 【发布时间】:2017-07-13 20:14:23 【问题描述】:

我是 Spark 的新手,我正在尝试建立从 Spark 1.6.3 到 Vertica 8.1.1 的连接。我正在使用 Vertica 提供的以下代码进行查询:

import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
val conf = new SparkConf().setAppName("vertica-spark-connector-testing").setMaster("local[1]")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val host = "x.x.x.x"
val db = "db"
val table = "table"
val user = "user"
val password = "password"
val part = "12";
val opt = Map("host" -> host, "table" -> table, "db" -> db, "numPartitions" -> part, "user" -> user, "password" -> password)
val df = sqlContext.read.format ("com.vertica.spark.datasource.DefaultSource")
.options(opt).load()
val c = df.select("a").filter("a > 5").count
println(c)
sc.stop();

我遇到以下错误

scala> val c = df.select("a").filter("a > 5").count :42: 错误:值选择不是 org.apache.spark.sql.DataFrameReader val c = df.select("a").filter("a > 5").count

当我尝试显示表格时,它没有返回任何内容

scala> sqlContext.sql("show tables").show()

+---------+-----------+
|tableName|isTemporary|
+---------+-----------+
+---------+-----------+

任何关于我做错了什么的想法以及任何关于我如何连接的帮助都将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:

您与 Vertica 的连接正常,否则您会在“显示表”查询中遇到异常。

检查分配给您的 codemonkey 用户的权限。他们是否有权访问 custDim?

检查 custDim 的结构。它有“a”列吗?

注释掉你的 val c 行并将 df.show() 放在它上面,然后再试一次。这至少会告诉您数据框中包含哪些列。

【讨论】:

感谢戴夫的回复。 df.show() 给了我一个类似的错误。错误:值显示不是 org.apache.spark.sql.DataFrameReader 的成员 如果 sqlContext.sql("show tables").show() 对你有用,试试 sqlContext.sql("select * from table").show() 你试过 sqlContext.read.format("jdbc") 吗?同样在您的 val opt=Map 中,我认为表可能是 dbtable。您的代码类似于my.vertica.com/get-started-vertica/integrating-apache-spark。听起来您的 SPARK_HOME 设置正确,否则没有任何效果。仔细检查 ls $SPARK_HOME/jars/ver* 的 vertica 驱动程序 感谢您的意见,戴夫。以下内容被 Spark 解析为两行不同的行,这就是数据帧 val df 从未创建的原因。 val df = sqlContext.read.format("com.vertica.spark.datasource.DefaultSource") .options(opt).load() 这就是发生错误的原因。我将它们移到一行中,它得到了修复。我现在可以使用 df.show() 显示表格。再次感谢!

以上是关于无法从 Spark 显示 Vertica 表的主要内容,如果未能解决你的问题,请参考以下文章

为啥从 Spark 写入 Vertica DB 比从 Spark 写入 MySQL 需要更长的时间?

从 PySpark 查询日期之间的 Vertica

无法使用 Sqoop 将数据从 Vertica 导入 Cassandra

R Shiny:无法检索 vertica DB 的 JDBC 结果集

使用 spark 将 parquet 文件加载到 vertica 数据库中

从 impala 更新 vertica 中的巨大记录