1

除非代码中没有定义 UDF,否则我在 HiveContext 和 Saxon 上的 Spark 工作正常。在 UDF 实现的情况下 - HiveContext 初始化失败并出现错误。我听说在 saxon 9.5.1.5 中解决了 saxon\java8 不兼容问题,该版本尚未在中央 maven 存储库中作为免费版本发布:

原因:java.lang.RuntimeException:XPathFactory#newInstance() 未能为默认对象模型创建 XPathFactory:http: //java.sun.com/jaxp/xpath/dom使用 XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: java.util.ServiceConfigurationError: javax.xml.xpath.XPathFactory: jar:file:/JBOD_D19/hadoop/cdh/yarn/nm/usercache/u23120d1/appcache/application_1477998759081_5017/container_e45_14701017_01_9000101017_01 /saxon-xpath-9.1.0.8.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2:javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:102) 处的非法配置文件语法在 org.apache.hadoop.hive.ql.udf.xml.UDFXPathUtil.(UDFXPathUtil.java:41) 在 org.apache.hadoop.hive.ql.udf.xml.GenericUDFXPath.(GenericUDFXPath.java:53)

4

1 回答 1

2

正确,在类路径上使用 Java8 中的 XPathFactory.newInstance() 方法和较旧版本的 Saxon 将导致此失败。所以使用较新版本的撒克逊语。当前版本是 9.7.0.11。

Saxon 的最新版本可以在 Maven 中找到。多年来,我们一直拒绝将 Saxon 放入 Maven,因为从 Maven 下载不满足我们使用的某些第三方软件组件所需的条件,即您不得在未分发法律条款和条件的情况下分发 JAR 文件。尽管通过 Maven 分发仍然违反了这一条件,但我们最终因为压倒性的需求而让步了。关心这些事情的组织不应该使用 Maven。

于 2016-11-17T23:21:45.393 回答