运行scala代码jar出现NoSuchMethodError:scala.Predef$.refArrayOps

2024-02-14

我的代码在idea中通过本地模式可以正常运行,当我打印成jar包上传到我部署的SPARK服务器上运行时,出现NoSuchMethodError: scala.预定义 $. refArrayOps 出现了。 出错的那行代码如下val expectArray=expectVertex.take(2).toArray.sortBy(it=>{it_1})ExpectVertex是一个scala映射,它的键类型是graphx.VertexId,它的值类型是Int

我在使用Spark简单代码执行此操作时也遇到了这个问题,当我使用数组函数的一行时出现此错误,代码如下 包 org.example

import org.apache.spark.graphx.{Edge, Graph}
import org.apache.spark.{SparkConf, SparkContext}

import java.util.logging.{Level, Logger}

/**
 * Hello world!
 *
 */
class App{
  def run(): Unit ={
    Logger.getLogger("org.apache.spark").setLevel(Level.WARNING)
    Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
    val conf = new SparkConf().setAppName("AXU test")
      .setMaster("local")
    val sc = new SparkContext(conf)
    val vertices = sc.parallelize(Array((1L, "A"), (2L, "B"), (3L, "C"), (4L, "D")))
    val edges = sc.parallelize(Array(Edge(1L, 2L, "friend"), Edge(2L, 3L, "follow"), Edge(3L, 4L, "friend")))
    val graph = Graph(vertices, edges)
    val inDegrees = graph.inDegrees
    inDegrees.collect().foreach(println)
    val deg = inDegrees.collect()
    for( i <- 0 to deg.length-1){
      print("this is no." + (i+1) + " point indegree:")
      println("id: " + deg(i)._1 + " value: " + deg(i)._2)
    }
    sc.stop()
  }
}

日志是

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.worker.DriverWrapper$.main(DriverWrapper.scala:65)
    at org.apache.spark.deploy.worker.DriverWrapper.main(DriverWrapper.scala)
Caused by: java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)[Ljava/lang/Object;
    at org.example.App.run(App.scala:23)
    at org.example.Main$.main(Main.scala:6)
    at org.example.Main.main(Main.scala)

如果我删除第23行中的代码,则代码是inDegrees.collect().foreach(println)它可以正常工作。 我编译和运行的scala版本都是2.12.7。 看来我不能使用像Array [T]这样的方法。 foreach 或数组 [T]。 jar包中的sortBy(it=>{it_1})(我使用Maven打包jar)。 maven内容如下。

    <properties>
        <scala.version>2.12.7</scala.version>
        <spark.version>2.4.4</spark.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <id>compile-scala</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile-scala</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>add-source</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <scalaVersion>${scala.version}</scalaVersion>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>org.example.Main</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>java</executable>
                    <includeProjectDependencies>true</includeProjectDependencies>
                    <includePluginDependencies>false</includePluginDependencies>
                    <classpathScope>compile</classpathScope>
                    <mainClass>org.example.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

有人能告诉我为什么会出现这个问题吗?先感谢您。


您很可能使用 Scala 2.12 在本地编译代码,但在服务器上它使用 Scala 2.13 或 2.11 运行。

尝试使用服务器上的 Scala 版本重新编译代码。

Scala 2.11、2.12、2.13 二进制不兼容。

的签名refArrayOps不同(以二进制不兼容的方式)

  • 在 Scala 2.13 中

def refArrayOps(scala.Array[scala.Any]): scala.Any(头皮)

public <T> T[] refArrayOps(T[])(javap)scalap 和 javap 显示不同的方法签名 https://stackoverflow.com/questions/44121009/scalap-and-javap-showing-different-method-signature

@inline implicit def refArrayOps[T <: AnyRef](xs: Array[T]): ArrayOps[T] [api https://www.scala-lang.org/api/2.13.10/scala/Predef%24.html#refArrayOps%5BT%3C:AnyRef%5D(xs:Array%5BT%5D):scala.collection.ArrayOps%5BT%5D] [sources https://github.com/scala/scala/blob/v2.13.10/src/library/scala/Predef.scala#L464]

  • 在 Scala 2.12 中

def refArrayOps(scala.Array[scala.Any]): scala.Array[scala.Any](头皮)

public <T> T[] refArrayOps(T[]) (javap)

implicit def refArrayOps[T <: AnyRef](xs: Array[T]): ArrayOps.ofRef[T] [api https://www.scala-lang.org/api/2.12.17/scala/Predef%24.html#refArrayOps%5BT%3C:AnyRef%5D(xs:Array%5BT%5D):scala.collection.mutable.ArrayOps.ofRef%5BT%5D] [sources https://github.com/scala/scala/blob/v2.12.17/src/library/scala/Predef.scala#L450]

  • 在 Scala 2.11-

def refArrayOps(scala.Array[scala.Any]): scala.collection.mutable.ArrayOps(头皮)

public <T> scala.collection.mutable.ArrayOps<T> refArrayOps(T[]) (javap)

implicit def refArrayOps[T <: AnyRef](xs: Array[T]): ArrayOps[T] [api 2.11 https://www.scala-lang.org/api/2.11.12/index.html#scala.Predef%24@refArrayOps%5BT%3C:AnyRef%5D(xs:Array%5BT%5D):scala.collection.mutable.ArrayOps%5BT%5D 2.10 https://www.scala-lang.org/api/2.10.7/index.html#scala.Predef%24] [来源2.11 https://github.com/scala/scala/blob/v2.11.12/src/library/scala/Predef.scala#L344 2.10 https://github.com/scala/scala/blob/v2.10.7/src/library/scala/Predef.scala#L334 2.9 https://github.com/scala/scala/blob/v2.9.3/src/library/scala/Predef.scala#L295]


Kafka 在 MAC 上启动错误 .. 与 java 和 scala 相关的东西 ... NoSuchMethodError: scala.Predef$.refArrayOps https://stackoverflow.com/questions/75712355/kafka-start-error-on-mac-something-related-to-java-and-scala-nosuchmethod

java.lang.NoSuchMethodError: scala.Predef$.refArrayOps https://stackoverflow.com/questions/40328948/java-lang-nosuchmethoderror-scala-predef-refarrayops

如何修复 NoSuchMethodError? https://stackoverflow.com/questions/35186/how-do-i-fix-a-nosuchmethoderror

尝试将表保存到 Hive 时出现 java.lang.NoSuchMethodError:org.apache.hadoop.hive.common.FileUtils.mkdir https://stackoverflow.com/questions/75880410/java-lang-nosuchmethoderror-org-apache-hadoop-hive-common-fileutils-mkdir-while

java.lang.NoSuchMethodError:Scala Spark 作业中的 scala.Predef$.refArrayOps https://stackoverflow.com/questions/61675153/java-lang-nosuchmethoderror-scala-predef-refarrayops-in-spark-job-with-scala


你可以运行

import java.net.URLClassLoader
import java.util.Arrays

//  List.unfold(getClass.getClassLoader) { cl =>
//    val urls = s"classloader: ${cl.getClass.getName}" :: 
//      (cl match {
//        case cl: URLClassLoader =>
//          "classloader urls:" :: 
//            cl.getURLs.map(_.toString).toList
//        case _ => List("not URLClassLoader")
//      })
//    Option.when(cl != null)((urls, cl.getParent))
//  }.flatten.foreach(println)

var cl = getClass.getClassLoader
while (cl != null) {
  println(s"classloader: ${cl.getClass.getName}")
  cl match {
    case cl: URLClassLoader =>
      println("classloader urls:")
      // cl.getURLs.foreach(println) // uses Scala refArrayOps again
      println(Arrays.toString(cl.getURLs.asInstanceOf[Array[Object]])) // pure Java
    case _ =>
      println("not URLClassLoader")
  }
  cl = cl.getParent
}

or

println(
  System.getProperty("java.class.path")
)

(System.getProperty("java.class.path") 和 getClassLoader.getURLs() 有什么区别? https://stackoverflow.com/questions/18626396/whats-the-difference-between-system-getpropertyjava-class-path-and-getclass)

在您正在使用的实际 Spark 环境中。然后你会看到你的类路径。是否有不同scala-library, 是否有不同_2.11, _2.12, _2.13依赖关系。

https://www.scala-sbt.org/1.x/docs/Howto-Classpaths.html https://www.scala-sbt.org/1.x/docs/Howto-Classpaths.html

scalacOptions += "-Ylog-classpath"


scala -version显示系统中安装的 Scala。类路径中的 Scala 可能不同。

为什么 SBT 显示的 ScalaVersion 与我的系统不同? https://stackoverflow.com/questions/75531849/why-does-sbt-show-a-different-scalaversion-than-my-system

build.sbt 不适用于不同的 Scala 版本 https://stackoverflow.com/questions/75883832/build-sbt-does-not-work-with-different-scala-versions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行scala代码jar出现NoSuchMethodError:scala.Predef$.refArrayOps 的相关文章

随机推荐

  • 如何解析隐藏的输入值

    我在这里或谷歌上找不到与解析隐藏输入值相关的任何内容 例如这里的这段代码 我正在尝试解析 40 个字符的密钥
  • Hadoop分区器

    我想问一下Hadoop分区器 它是在Mappers中实现的吗 如何衡量使用默认哈希分区器的性能 是否有更好的分区器来减少数据偏差 Thanks 分区器不在映射器内 以下是每个映射器中发生的过程 每个映射任务将其输出写入循环缓冲存储器 而不是
  • MYSQL - 从不同数据库中选择

    如何从两个不同的数据库中将同一查询中的数据选择到同一服务器中 这就是我正在做的事情 但我的查询不起作用 sqlquery SELECT FROM database 2 table 2 WHERE database 1 table 1 dat
  • 使用 MPNowPlayingInfoCenter 处理 CarPlay 中的播放事件

    我正在尝试构建一个带有 CarPlay 集成的示例音频应用程序 该应用程序是一个测试项目 没有 API 没有流媒体 没有复杂的 UI 只是一个简短的歌曲名称列表 具有选择歌曲并播放的功能 我的目标是在 正在播放 屏幕上按下播放按钮时处理回调
  • Java接口是抽象类吗? [复制]

    这个问题在这里已经有答案了 我正在做一些家庭作业 之前试卷上的一个问题要求命名给定 UML 图中的所有抽象类 我想相当简单 有1个抽象类和3个接口 一般来说 这些接口是否符合抽象类的资格 问题是 虽然从技术上讲 接口可以在 Java 等语言
  • 如何阻止 Linux 初始化 USB HID 设备

    我有一个 USB HID 设备 可以在两种不同的模式下工作 模式的选择基于发送给它的 USB 枚举 初始化数据包的顺序 我使用的是运行 Raspbian 的 Raspberry Pi 3 但是如果我为桌面 Ubuntu 发行版编译代码 我也
  • 模板通过 const 引用传递

    我已经看过一些类似的问题 但我仍然很困惑 我正在想办法明确地 不是通过编译器优化等 和 C 03 兼容 避免在将对象传递给对象时复制对象专门模板功能 这是我的测试代码 include
  • Java - 为什么我不能使用 charAt() 来查看一个 char 是否等于另一个?

    我想查看字符串中的字符是否等于某个其他字符值 但我不知道字符串中的字符是什么 所以我使用了这个 if fieldNames charAt 4 f 但我收到错误 Operator cannot be applied to char jav l
  • viewDidDisappear 没有在 UINavigationController 上被调用

    我的导航控制器有问题 如果我将视图控制器添加到堆栈中 void tui ToggleListStudy id sender listVC ListViewController alloc init self navigationContro
  • 将样式化的 pandas 数据框导出到 Excel

    我正在尝试使用以下脚本将时尚的数据框导出到 Excel 文件 import pandas as pd import numpy as np np random seed 24 df pd DataFrame A np linspace 1
  • PyCharm:为什么“音频”受到青睐?

    为什么audioop如果我想进口 请优先选择reverse 我的代码包含from django urls import reverse已经存在于许多文件中 为什么 PyCharm 不查看我的其他文件 然后将当前的第二个选项设为第一个选项 我
  • “目录名称无效。”等等,在Windows上使用rabbitmq-plugins

    我正在尝试通过以下方式让 RabbitMQ 在 Windows 10 上运行这些说明 http arcware net installing rabbitmq on windows 但是 当尝试通过 powershell 命令启用管理插件时
  • 使用 vue.js 获取调用元素

    我想获取 vue js 中调用 html 元素以通过 jQuery 修改它 现在 我为每个元素指定类名 索引 然后通过 jQuery 调用它 但这看起来像是一个疯狂的 hack 我想做的事 new Vue el app data testF
  • 为什么中序和前序遍历对于创建算法来确定 T2 是否是 T1 的子树很有用

    我正在看一本采访书 问题是 你有两个非常大的二叉树 T1 拥有数百万个节点 并且T2 有数百个节点 创建一个算法来决定是否T2是一个 的子树T1 作者提到这是一个可能的解决方案 请注意 这里的问题指定T1有数百万 节点 这意味着我们应该注意
  • 无法从 NGINX 获取包含句点的标头

    标题 Abp TenantId is null因为 如果删除 like AbpTenantId 一切都会安好的 如何添加标题 localhost debug 显示临时标头 根据客户请求显示 Request Headers Unknown 在
  • Material UI 网格列表行有一个很大的尴尬间隙

    我正在使用 Material UI 和 Reactjs 我对网格列表组件有疑问 我尝试使用网格 1000x1000px 因此我将自定义 gridList 样式中的高度和宽度分别指定为 1000 和 1000 如文档中所示 应有 10 列 每
  • 在多个节点上运行kafka connect分布式模式

    我正在测试一个卡夫卡连接器的弹性 我想在它运行时杀死一个工作人员 从而杀死连接器实例 最简单的方法可能是强制分布式模式在多个节点上运行 然后终止该节点上的工作进程 对吗 如何使 Kafka 将生成工作程序连接到不仅仅是其启动的节点上 这是在
  • 如何调试 Mac OS X 上的互斥锁问题?

    我正在尝试让 gdb lldb 存根为我正在制作的程序工作 现在它似乎使调试器陷入僵局 所以我 讽刺的是 在我的机器上调试 lldb 以尝试找出问题所在 lldb 正在尝试锁定互斥体 并且似乎陷入僵局 在 Windows 上 我知道你可以使
  • java连接到sql server 2008express

    我尝试连接到我的 BD 这是我的代码 public class JavaSQLTest param args the command line arguments public static void main String args tr
  • 运行scala代码jar出现NoSuchMethodError:scala.Predef$.refArrayOps

    我的代码在idea中通过本地模式可以正常运行 当我打印成jar包上传到我部署的SPARK服务器上运行时 出现NoSuchMethodError scala 预定义 refArrayOps 出现了 出错的那行代码如下val expectArr