我在 HIVE 中有一个示例表 (stuends1),我想使用 JDBC 从 Spark 连接它(因为 Hive 在 AWS 中,而不是在同一个集群中)。我只是尝试使用以下代码
def main(args: Array[String]): Unit = {
//Class.forName("org.apache.hive.jdbc.HiveDriver").newInstance()
val conf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[*]")
val sc = new SparkContext(conf)
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.getOrCreate()
val jdbcDF = spark.read
.format("jdbc")
.option("url", "jdbc:hive2://34.223.237.55:10000")
.option("dbtable", "students1")
.option("user", "hduser")
.option("password", "hadoop")
//.option("driver", "org.apache.hadoop.hive.jdbc.HiveDriver")
.load()
println("able to connect------------------")
jdbcDF.show
jdbcDF.printSchema()
jdbcDF.createOrReplaceTempView("std")
val sqlDF = spark.sql("select * from std")
println("Start println-----")
spark.sqlContext.sql("select * from std").collect().foreach(println)
println("end println-----")
sqlDF.show(false)
}
我尝试了多种方法,但始终只显示带有列名的表结构。喜欢...
+--------------+-------------+-------------+
|students1.name|students1.age|students1.gpa|
+--------------+-------------+-------------+
+--------------+-------------+-------------+
但不是数据,但在尝试使用本地 SQL 查询使用 dbeaver 时能够获取数据。从 spark 来看,jdbcDF.printSchema() 也显示了正确的模式,所以我想连接没有问题。
我将 spark 2.1.1 与 HIVE 1.2.1 一起使用。我的 sbt.build 文件是这样的....
libraryDependencies ++= Seq(
"log4j" % "log4j" % "1.2.17",
"org.apache.spark" % "spark-core_2.11" % "2.1.1" ,
"org.apache.spark" % "spark-streaming-kafka_2.10" % "1.6.2",
"org.apache.spark" % "spark-hivecontext-compatibility_2.10" % "2.0.0-preview",
"org.apache.spark" % "spark-sql_2.11" % "2.1.1" ,
"org.apache.spark" % "spark-hive_2.10" % "2.1.1",
"org.apache.hive" % "hive-jdbc" % "1.2.1"
)
谁能告诉我为什么我没有得到 show() 的任何输出。提前致谢...
最佳答案
请提及fetchsize属性,它会解决没有数据的问题。
fetchsize - JDBC 提取大小,它确定每次往返要提取多少行。这有助于为具有低提取大小的 JDBC 驱动程序(例如,具有 10 行的 Oracle)获得一些性能。此选项仅适用于阅读。
val jdbcDF = spark.read
.format("jdbc")
.option("url", "jdbc:hive2://34.223.237.55:10000")
.option("dbtable", "students1")
.option("user", "hduser")
.option("password", "hadoop")
.option("fetchsize", "20")
.load()
关于scala - Spark JDBC 与 HIVE - Scala,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45855981/