如何使用Hive支持创建SparkSession(未找到“Hive类”)?

当我尝试运行此代码时,我收到此错误。

import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; public class App { public static void main(String[] args) throws Exception { String warehouseLocation = "file:" + System.getProperty("user.dir") + "spark-warehouse"; SparkSession spark = SparkSession .builder().master("local") .appName("Java Spark Hive Example") .config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport() .getOrCreate(); String path = "/home/cloudera/Downloads/NetBeansProjects/sparksql1/src/test/Employee.json"; spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)"); spark.sql("LOAD DATA LOCAL INPATH '"+path+"' INTO TABLE src"); //load from HDFS Dataset df = spark.read().json(path); df.registerTempTable("temp_table"); spark.sql("create table TEST.employee as select * from temp_table"); df.printSchema(); df.show(); } } 

输出:

线程“main”中的exceptionjava.lang.IllegalArgumentException:无法使用Hive支持实例化SparkSession,因为找不到Hive类。 在com.training.hivetest.App.main的org.apache.spark.sql.SparkSession $ Builder.enableHiveSupport(SparkSession.scala:778)(App.java:21)

怎么解决?

将以下依赖项添加到您的maven项目。

  org.apache.spark spark-hive_2.11 2.0.0  

我查看了源代码,发现尽管有HiveSessionState (在spark-hive中),还需要另一个类HiveConf来启动SparkSession。 并且HiveConf不包含在spark-hive * jar中,也许你可以在hive相关的jar中找到它并将它放在你的类路径中。

我有同样的问题。 我可以通过添加以下依赖项来解决它。 (我通过引用spark-hive_2.11 mvn存储库页面的编译依赖项部分解决了这个列表):

   org.apache.spark spark-hive_${scala.binary.version} ${spark.version}   org.apache.calcite calcite-avatica 1.6.0   org.apache.calcite calcite-core 1.12.0   org.spark-project.hive hive-exec 1.2.1.spark2   org.spark-project.hive hive-metastore 1.2.1.spark2   org.codehaus.jackson jackson-mapper-asl 1.9.13  

其中scala.binary.version = 2.11和spark.version = 2.1.0

   2.11 2.1.0