我的Spark工作与HiveContext和Saxon工作正常,除非代码中没有定义UDF。在UDF实现的情况下 - HiveContext初始化失败并出错。我听说在saxon 9.5.1.5中解决了saxon \ java8 inccompability,它在中央maven存储库中尚未发布为免费版本:
引起:java.lang.RuntimeException:XPathFactory #newInstance() 无法为默认对象模型创建XPathFactory: http://java.sun.com/jaxp/xpath/dom与... https://www.angular-meteor.com/tutorials/socially/angular1/bootstrapping XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: java.util.ServiceConfigurationError:javax.xml.xpath.XPathFactory: 罐子:文件:/JBOD_D19/hadoop/cdh/yarn/nm/usercache/u23120d1/appcache/application_1477998759081_5017/container_e45_1477998759081_5017_01_000001/saxon-xpath-9.1.0.8.jar /META-INF/services/javax.xml.xpath.XPathFactory! 2: 非法配置文件语法 javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:102)at org.apache.hadoop.hive.ql.udf.xml.UDFXPathUtil。(UDFXPathUtil.java:41) 在 org.apache.hadoop.hive.ql.udf.xml.GenericUDFXPath。(GenericUDFXPath.java:53)
答案 0 :(得分:2)
使用Java8中的XPathFactory.newInstance()方法和类路径上较旧版本的Saxon进行更正将导致此失败。所以使用较新版本的Saxon。目前的版本是9.7.0.11。
最新版本的Saxon可以在Maven中找到。我们拒绝将Saxon放入Maven多年,因为从Maven下载不满足我们使用的某些第三方软件组件所需的条件,即不必分发JAR文件而不分发法律条款和条件。尽管通过Maven分发仍然违反了这一条件,我们最终因为压倒性的需求而心软了。关心这些事情的组织不应该使用Maven。