我正在提交一个使用poi 3.17读取Excel文件的Spark作业,但是由于它们是包含Poi 3.14的hadoop类路径上的快速矿工jar,并且两个版本之间存在一些差异,因此我无法运行我的spark作业成功失败了一半。
这是我的火花提交
spark2-submit --class Digital--master yarn --deploy-mode cluster --executor-memory 5G --num-executors 4 --executor-cores 4 --driver-memory 20G --driver-cores 8 --conf spark.driver.maxResultSize=7G --conf
--conf spark.executor.heartbeatInterval=60s --conf
spark.yarn.maxAppAttempts=1 --conf spark.yarn.queue=${queueName} --conf
spark.dynamicAllocation.enabled=false --jars alarming-v2.jar --files
/etc/hive/conf/hive-site.xml --principal ${edgeUser}@${kerberos_realm} --
keytab ${edgeUser}.keytab BM-1.0.jar /tmp/digital ${start_date}
,一旦我从集群中删除了这些快速矿工罐,我就可以成功运行火花提交了。 不幸的是,我们无法从其中一个群集中删除快速jar,因此我仍然在该群集上遇到错误。
我使用3.15中添加的getCellTypeEnum
我试图像这样重新定位冲突的库。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
<!-- <scope>compiled</scope> -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
<!-- <scope>provided</scope> -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
<!--<scope>provided</scope> -->
</dependency>
重定位代码段
<relocation>
<pattern>org.apache.poi</pattern>
<shadedPattern>org.shaded.apache.poi</shadedPattern>
</relocation>
然后我收到此错误。
我认为这可能仅是遮蔽了第一个poi依赖关系,而不是其他2个
Caused by: java.lang.ClassNotFoundException: org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableStyles
到此stackoverflow页面的链接使我认为我有一个问题,即此依赖项未隐藏 java.lang.NoClassDefFoundError: org/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook$Factory
进行一些故障排除后进行更新,似乎无法隐藏下面的隐式类
Caused by: java.lang.ClassCastException: org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.ExternalLinkDocumentImpl cannot be cast to org.shaded.openxmlformats.schemas.spreadsheetml.x2006.main.ExternalLinkDocument
at org.shaded.openxmlformats.schemas.spreadsheetml.x2006.main.ExternalLinkDocument$Factory.parse(Unknown Source)
是否可以以某种方式遮盖隐式类?
非常感谢您的帮助。