如何使用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