尝试运行以下代码时出错:
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 {
SparkSession
.builder()
.enableHiveSupport()
.getOrCreate();
}
}
输出:
Exception in thread "main" java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support because Hive classes are not found.
at org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:778)
at com.training.hivetest.App.main(App.java:21)
如何解决?
10条答案
按热度按时间zkure5ic1#
我也有同样的问题。我可以通过添加以下依赖项来解决它(我通过参考spark-hive 2.11 mvn存储库页面的编译依赖项部分解决了此列表:
其中scala.binary.version=2.11和spark.version=2.1.0
mgdq6dx12#
我的spark2.4.1依赖项的完整列表在这里
aemubtdh3#
我查看了源代码,发现尽管有hivesessionstate(在spark hive中),但还需要另一个类hiveconf来启动sparksession。而且hiveconf不包含在spark-hive*jar中,也许您可以在与hive相关的jar中找到它并将它放在类路径中。
bxfogqkk4#
向maven项目添加以下依赖项。
v6ylcynt5#
热释光;博士,你必须确保spark sql
spark-hive
依赖项和所有可传递的依赖项在运行时都可以在sparksql应用程序的类路径上使用(而不仅仅是编译所需的构建时间)。换句话说,你必须
org.apache.spark.sql.hive.HiveSessionStateBuilder
以及org.apache.hadoop.hive.conf.HiveConf
spark应用程序类路径上的类(与sbt或maven关系不大)。前者
HiveSessionStateBuilder
是的一部分spark-hive
依赖关系(包括所有可传递的依赖关系)。后者
HiveConf
是的一部分hive-exec
依赖关系(即上述的可传递依赖关系spark-hive
依赖关系)。0pizxfdo6#
[更新我的答案]这个关于stackoverflow的答案是正确答案链接。
我还面临使用hivesupport构建和运行spark的问题。基于上述答案,我在spark2.12.8项目中做了以下工作。
已将my build.sbt更新为以下内容
手动删除.idea/库中的文件
在sbtshell窗口中单击“刷新所有sbt项目”按钮(我正在使用intellij)
我现在可以运行项目没有任何问题。
ycl3bljg7#
确保您正在通过spark submit脚本运行jar:
它是一个脚本,加载到所需的类中,并在执行jar之前提供scala支持。
另外,正如其他人所提到的,请确保您也加载了所需的依赖项。
示例:运行spark会话
那么要通过spark执行这个代码:
感谢@lamber ken帮助我解决这个问题。
更多信息:
spark文档:提交应用程序
异常无法使用配置单元支持示例化sparksession,因为找不到配置单元类
roejwanj8#
在我的情况下,我必须检查
包括具有“提供”范围的依赖项
在intellij中的“我的运行/调试配置”下
qyzbxkaa9#
尽管所有最重要的答案都是正确的,但是你仍然面临问题,那么请记住问题中描述的错误仍然可能发生,即使你在pom中提到了jar。
为了解决此问题,请确保所有依赖项的版本应相同,并且作为标准实践,为spark版本和scala版本维护一个全局变量,并替换这些值以避免由于不同版本而产生任何冲突。
仅供参考:
vngu2lb810#
sbt使用
// https://mvnrepository.com/artifact/org.apache.spark/spark-hive
我们使用了spark-core-2.1.0和spark-sql-2.1.0