Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoSuchMethodError:scala.Predef$.refArrayOps_Scala - Fatal编程技术网

java.lang.NoSuchMethodError:scala.Predef$.refArrayOps

java.lang.NoSuchMethodError:scala.Predef$.refArrayOps,scala,Scala,我有以下课程: import scala.util.{Success, Failure, Try} class MyClass { def openFile(fileName: String): Try[String] = { Failure( new Exception("some message")) } def main(args: Array[String]): Unit = { openFile(args.head) } } 具有以下单元测

我有以下课程:

import scala.util.{Success, Failure, Try}


class MyClass {

  def openFile(fileName: String): Try[String]  = {
    Failure( new Exception("some message"))
  }

  def main(args: Array[String]): Unit = {
    openFile(args.head)
  }

}
具有以下单元测试:

class MyClassTest extends org.scalatest.FunSuite {

  test("pass inexistent file name") {
    val myClass = new MyClass()
    assert(myClass.openFile("./noFile").failed.get.getMessage == "Invalid file name")
  }

}
当我运行
sbt测试时
我得到以下错误:

java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
        at org.scalatest.tools.FriendlyParamsTranslator$.translateArguments(FriendlyParamsTranslator.scala:174)
        at org.scalatest.tools.Framework.runner(Framework.scala:918)
        at sbt.Defaults$$anonfun$createTestRunners$1.apply(Defaults.scala:533)
        at sbt.Defaults$$anonfun$createTestRunners$1.apply(Defaults.scala:527)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
        at scala.collection.immutable.Map$Map1.foreach(Map.scala:109)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
        at scala.collection.AbstractTraversable.map(Traversable.scala:105)
        at sbt.Defaults$.createTestRunners(Defaults.scala:527)
        at sbt.Defaults$.allTestGroupsTask(Defaults.scala:543)
        at sbt.Defaults$$anonfun$testTasks$4.apply(Defaults.scala:410)
        at sbt.Defaults$$anonfun$testTasks$4.apply(Defaults.scala:410)
        at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:35)
        at scala.Function8$$anonfun$tupled$1.apply(Function8.scala:34)
        at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
        at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:40)
        at sbt.std.Transform$$anon$4.work(System.scala:63)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:226)
        at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
        at sbt.Execute.work(Execute.scala:235)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:226)
        at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:159)
        at sbt.CompletionService$$anon$2.call(CompletionService.scala:28)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
[error] (test:executeTests) java.lang.NoSuchMethodError: scala.Predef$.refArrayOps([Ljava/lang/Object;)Lscala/collection/mutable/ArrayOps;
生成定义:

version := "1.0"

scalaVersion := "2.12.0"

// https://mvnrepository.com/artifact/org.scalatest/scalatest_2.11
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "3.0.0"

我不知道是什么原因造成的。我的类和单元测试似乎很简单。有什么想法吗?

scalatest_2.11
是scalatest的版本,仅与Scala 2.11.x兼容。编写
libraryDependencies+=“org.scalatest”%%“scalatest”%%“3.0.0”%%“test”
(注意
%%
)以自动选择正确的版本并切换到Scala 2.11.8,直到
scalatest_2.12
发布(应该很快)。有关详细信息,请参阅。

尝试将以下行添加到build.sbt

您的build.sbt应如下所示:

libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.1"

libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"

根据我的经验,如果在
build.sbt
中匹配
scalatest
版本和
scala
版本后仍然出现错误,则必须考虑机器上运行的实际scala版本。 您可以通过
$scala
查看

欢迎使用Scala 2.12.1(Java热点(TM)64位服务器虚拟机,Java 1.8.0121)。
键入要计算的表达式。或者尝试:帮助。
这类消息。
您需要匹配此Scala版本(例如这里的
2.12.1
)和
build.sbt
的版本。

我使用了IntelliJ,然后再次导入项目。 我的意思是,关闭打开的项目并作为Maven或SBT导入。 注意:我选择mvn(自动导入Maven项目) 它消失了


我在全局库中使用了不同版本的Scala(IntelliJ IDEA)的SDK。

文件->项目结构->全局库->删除SDK->重建。它为我修复了一个异常。

在eclipse ide中,项目倾向于使用scala安装的“最新2.12捆绑包(动态)”配置进行预选。如果您实际上没有在Scala项目中使用2.12,并且您试图通过IDE运行项目,那么这个问题就会显现出来


我还注意到,如果我用sbt命令“eclipsewithsource”重建我的eclipse项目,这会产生副作用,将eclipse项目scala安装重置回2.12设置(即使我的build.sbt文件配置为scala的2.11版本)。因此,请注意这两种情况。

当您使用SparkHadoopScalajava时,会出现一些不兼容。您可以使用与其他版本兼容的每个版本。我使用Spark版本:2.4.1、Hadoop:2.7、java:9.0.1和Scala:2.11.12
它们彼此兼容。

在我的例子中,Spark版本使其不兼容。
对Spark 2.4.0的更改对我来说很有用。

这在DataBricks中发生在我身上。这个问题和前面的回答中提到的一样,与spark和scala版本不兼容。对于DataBricks,我必须更改集群DataBricks的运行时版本。默认值是Scala 2.11/Spark 2.4.5,将其至少提升到Scala 2.12/Spark 3.0.0

单击群集>群集名称>编辑>DataBricks运行时版本


在我的例子中,我有一个依赖于不同版本scala的项目jar。这是在项目结构->模块->(所选项目)->依赖项选项卡下找到的。项目中的所有其他内容及其库都在scala版本(2.12)中排列,但另一个jar隐藏了对较旧版本(2.11)的可传递依赖关系。

当您使用scala 2.11为scala 2.12项目编译的scala jar文件时,会发生此错误

Scala库通常使用不同版本的Scala进行交叉编译,因此针对不同的项目版本将不同的JAR文件发布到Maven。例如,Scalatest版本3.2.3将单独的JAR文件发布到Maven到Scala 2.10、2.11、2.12和2.13,如下所示

很多Spark程序员在将使用Scala 2.11编译的JAR文件附加到运行Scala 2.12的集群时都会遇到这个错误。有关如何将Spark项目从Scala 2.11迁移到Scala 2.12的详细指南,请参阅

正如公认的答案所提到的,在指定Scala依赖项时,应该使用SBT
%%
运算符,这样您就可以自动获取与项目的Scala版本相对应的库依赖项(如公认的答案所提到的)。如果库依赖项没有您要查找的Scala版本的JAR文件,则
%%
操作符将不会帮助您。查看火花释放,例如:

build.sbt
文件将起作用,因为Spark 3.0.1有一个Scala 2.12版本:

scalaVersion:=“2.12.12”
libraryDependencies+=“org.apache.spark”%%“spark sql”%%“3.0.1”
此代码将不起作用,因为Spark 3.0.1没有Scala 2.11版本:

scalaVersion:=“2.12.12”
libraryDependencies+=“org.apache.spark”%%“spark sql”%%“3.0.1”
如果库依赖项也是交叉编译的,则可以交叉编译项目并为不同的Scala版本构建JAR文件。Spark 2.4.7与Scala 2.11和Scala 2.12交叉编译,因此您可以使用以下代码交叉编译项目:

scalaVersion:=“2.11.12”
交叉标度偏差:=序号(“2.11.12”、“2.12.10”)
libraryDependencies+=“org.apache.spark”%%“spark sql”%%“2.4.7”

sbt+assembly
代码将为您的项目构建两个JAR文件,一个用Scala 2.11编译,另一个用Scala 2.12编译。发布多个JAR文件的库遵循类似的交叉编译流程。

我正在使用ApacheSpark-3.1.1和ApacheIgnite-2.10进行PoC,并尝试将数据从Spark加载到ignite集群。但在保存数据时,我得到以下错误

libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.1" libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.1" % "test"

df.write
            .format(FORMAT_IGNITE)
            .option(OPTION_CONFIG_FILE, CONFIG)
            .option(OPTION_TABLE, "connect")
            .option(OPTION_CREATE_TABLE_PRIMARY_KEY_FIELDS, "id")
            .option(OPTION_CREATE_TABLE_PARAMETERS, "template=replicated").mode(SaveMode.Append)
            .save()