2016-11-17 62 views
0

HiveContext和Saxon的Spark工作正常,除非在代碼中沒有定義UDF。在UDF實現的情況下 - HiveContext初始化失敗並報錯。我聽說有撒克遜\ java8 incompability撒克遜9.5.1.5解決了,這是不是在中央Maven倉庫尚未公佈爲免費版本:HiveUDF + saxon 9.1.0.8 + Java8 =未能創建XPathFactory

Caused by: java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the 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_1477998759081_5017_01_000001/saxon-xpath-9.1.0.8.jar!/META-INF/services/javax.xml.xpath.XPathFactory:2: Illegal configuration-file syntax at javax.xml.xpath.XPathFactory.newInstance(XPathFactory.java:102) at org.apache.hadoop.hive.ql.udf.xml.UDFXPathUtil.(UDFXPathUtil.java:41) at org.apache.hadoop.hive.ql.udf.xml.GenericUDFXPath.(GenericUDFXPath.java:53)

回答

1

正確,使用從Java8的XPathFactory.newInstance()方法與舊在類路徑中釋放Saxon會導致此失敗。因此請使用更新版本的Saxon。目前的版本是9.7.0.11。

最近發佈的Saxon可以在Maven找到。我們拒絕將Saxon放入Maven多年,因爲從Maven下載並不能滿足我們使用的某些第三方軟件組件的條件,即您不必分發JAR文件,也不會分發法律條款和條件。儘管通過Maven進行分發仍然違反了這一條件,但我們最終因爲需求壓力而變得鬆懈。關心這些事情的組織不應該使用Maven。