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

Spark集群运行Scala Jar报NoSuchMethodError:scala.Predef$.refArrayOps求助

Scala打包Jar在Spark服务器运行时出现NoSuchMethodError的原因分析

问题场景

本地IDEA中Scala代码运行正常,但打包成Jar上传到自建Spark服务器运行时,抛出NoSuchMethodError:scala.Predef$.refArrayOps错误。触发错误的代码涉及Array的foreach、sortBy等方法,例如:

val expectArray=expectVertex.take(2).toArray.sortBy(it=>{it._1})

示例代码中的触发点:

inDegrees.collect().foreach(println)

错误日志关键片段:

Caused by: java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object;
    at org.example.App.run(App.scala:23)

用户本地使用Scala 2.12.7编译,Spark版本为2.4.4,通过Maven的assembly-plugin打包成包含依赖的Jar。

核心原因

  1. Spark与Scala版本不兼容
    Spark 2.4.x官方仅支持Scala 2.11系列,并不兼容Scala 2.12。你本地用Scala 2.12.7编译代码,而自建Spark服务器使用的是Scala 2.11环境,两者的类库存在API差异:scala.Predef$.refArrayOps方法在Scala 2.12中是标准方法,但在Scala 2.11中不存在或签名不同,导致运行时找不到该方法。

  2. 打包方式引发依赖冲突
    你使用maven-assembly-plugin的jar-with-dependencies打包,会将本地Scala 2.12的类库一并打入Jar包。上传到Spark服务器后,服务器的类加载器会优先加载Jar包内的Scala类,与服务器自身的Scala 2.11类库产生冲突,进一步触发方法找不到的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:55:16