我需要从spark执行远程配置单元服务器上的配置单元查询,但由于某些原因,我只收到列名(没有数据)。 表中的数据,我通过HUE和java jdbc连接检查它。
这是我的代码示例:
val test = spark.read
.option("url", "jdbc:hive2://remote.hive.server:10000/work_base")
.option("user", "user")
.option("password", "password")
.option("dbtable", "some_table_with_data")
.option("driver", "org.apache.hive.jdbc.HiveDriver")
.format("jdbc")
.load()
test.show()
输出:
+-------+
|dst.col|
+-------+
+-------+
我知道这张桌子上的数据可以使用。
Scala版本:2.11 Spark版本:2.1.0,我也试过2.1.1 Hive版本:CDH 5.7 Hive 1.1.1,在HDP上我有相同的故事 Hive JDBC版本:1.1.1我也尝试过更高版本
但是这个问题在Hive和更高版本上也可用。 你能帮我解决这个问题,因为我在邮件组答案和StackOverflow中找不到任何东西。 也许您知道我如何执行从spark到远程服务器的配置单元查询?
答案 0 :(得分:0)
您应该将此添加到您的选项中:
.option("fetchsize", "10")
答案 1 :(得分:0)
Paul Staab在Spark jira中回答了此问题。 这是解决方案:
创建一个Hive方言,使用正确的引号来转义列名:
object HiveDialect extends JdbcDialect {
override def canHandle(url: String): Boolean = url.startsWith("jdbc:hive2")
override def quoteIdentifier(colName: String): String = s"`$colName`"
}
在通过spark.read.jdbc拨打电话之前注册它
JdbcDialects.registerDialect(HiveDialect)
使用fetchsize选项执行spark.read.jdbc
spark.read.jdbc("jdbc:hive2://localhost:10000/default","test1",properties={"driver": "org.apache.hive.jdbc.HiveDriver", "fetchsize": "10"}).show()