1.通过spark提供的jdbc方式连接代码如下
val spark = SparkSession.builder().master("local").getOrCreate()
val rdd = spark.read.format("jdbc")
.format("jdbc")
.option("driver", "org.apache.hive.jdbc.HiveDriver")
.option("url", "jdbc:hive2://hiveserver2:10000")
.option("user", "hive")
.option("dbtable", "dep.tablename1")
.option("fetchsize", "100")
.load()
rdd.show()
2.执行之后发现读取的数据全为表名数据
3.分析和调试
通过一步步的调试发现代码最终会到JDBCRDD,所以在compute方法打断点,一步步调试发现到下面代码的时候出现问题

通过查看sqlText的值发现sqlText的值为 select "columns1" from dep.tablename1 的值,很显然得到的结果肯定是columns1的值。为什么会出现上面的问题我们跟踪colmnList的值发现代码在下面出现
private val columnList: String = {
val sb = new StringBuilder()
columns.foreach(x => sb.append(",").append(x))
if (sb.isEmp

本文介绍使用Spark JDBC方式连接Hive时遇到的问题及解决办法。主要问题出现在Hive表列名的处理上,导致读取的数据仅包含表名。通过自定义Hive Dialect并调整列名引用方式来解决。
最低0.47元/天 解锁文章
2202

被折叠的 条评论
为什么被折叠?



