You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Spark程序中使用Cobrix遇scala/Product$class类缺失错误求助

在Java Spark程序中运行Cobrix遇到类/版本不匹配问题

有人尝试过在Java Spark程序中运行Cobrix吗?我在调用COBOL数据源时遇到了类/版本不匹配问题。执行以下spark-submit命令时:

spark-submit spark-cobol_2.11-2.6.9-bundle.jar --class com.test.cobol.App --master local target/spark-cobol-jay-1.0-SNAPSHOT.jar

出现如下错误:

23/12/27 16:45:50 INFO DefaultSource: Cobrix 'spark-cobol' build 2.6.9 (2023-10-16T10:52:47) 
Exception in thread "main" java.lang.NoClassDefFoundError: scala/Product$class
    at za.co.absa.cobrix.cobol.parser.recordformats.RecordFormat$FixedLength$.<init>(RecordFormat.scala:22)

问题原因及解决办法

1. 修正spark-submit命令参数顺序

spark-submit的正确语法是先指定运行参数(如--class、--master),再通过--jars引入依赖包,最后指定主应用jar。你当前的命令把Cobrix的bundle jar放在最前面,会被当作主应用jar解析,导致参数和依赖逻辑混乱。

修正后的命令示例:

spark-submit --class com.test.cobol.App --master local --jars spark-cobol_2.11-2.6.9-bundle.jar target/spark-cobol-jay-1.0-SNAPSHOT.jar

更推荐用--packages自动拉取匹配的依赖包,避免手动管理jar:

spark-submit --class com.test.cobol.App --master local --packages za.co.absa.cobrix:spark-cobol_2.11:2.6.9 target/spark-cobol-jay-1.0-SNAPSHOT.jar

2. 对齐Scala版本

scala/Product$class找不到的核心原因是Scala版本不匹配:

  • 你使用的Cobox是基于Scala 2.11构建的(jar名中的_2.11后缀),需要确认本地/集群的Spark环境也是基于Scala 2.11编译的。
  • 如果你的Spark是Scala 2.12版本,需替换为对应版本的Cobrix包,比如spark-cobol_2.12-2.6.9-bundle.jar。

3. 同步项目依赖配置

如果是Maven/Gradle项目,确保依赖中Cobrix的Scala版本与Spark一致:
Maven依赖示例(Scala 2.11):

<dependency>
    <groupId>za.co.absa.cobrix</groupId>
    <artifactId>spark-cobol_2.11</artifactId>
    <version>2.6.9</version>
</dependency>

若Spark用Scala 2.12,将_2.11改为_2.12即可。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:18:18