我的 Spark 作业使用 HiveContext 和 Saxon 工作正常,除非代码中没有定义 UDF。在 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:文件:/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/服务/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)
正确的是,在类路径上使用 Java8 中的 XPathFactory.newInstance() 方法和旧版本的 Saxon 会导致此失败。因此,请使用较新版本的 Saxon。当前版本是 9.7.0.11。
Saxon 的最新版本可以在 Maven 中找到。多年来我们一直拒绝将 Saxon 放入 Maven,因为从 Maven 下载不满足我们使用的某些第三方软件组件所需的条件,即在未分发法律条款和条件的情况下不得分发 JAR 文件。由于需求巨大,我们最终态度软化,尽管通过 Maven 分发仍然违反了这一条件。关心这些事情的组织不应该使用 Maven。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)