次の機能があります。
def removeLast(list: List[Int]): List[Int] = list match {
case List() => List()
case List(x) => List()
case x :: xs => x :: removeLast(xs)
}
私がそれを定義してsbtコンソールからそれを使うと、すべてうまくいきます。しかし、Intellij IDEA=でワークシートを作成して実行しようとすると、次の例外が表示されます。
Java.lang.NoSuchMethodError:scala.collection.immutable。$ colon $ colon.hd $ 1()Ljava/lang/Object;週5.A $ A26 $ A $ A26.removeLast(lists.sc8362409100671270508.tmp:30)at #worksheet#。#worksheet#(lists.sc8362409100671270508.tmp:33)
さらに、最後の行を次のように変更すると:
case x :: xs => 1 :: removeLast(xs)}
それが機能します。
問題は何でしょうか?
私はこの問題を抱えていました。 Andrzejに同意します。アイデアは独自のコンパイラを使用するため、どうにかして無効にする必要があります。 Settings-> Scala-> Worksheetに移動し、"Run worksheet in the compiler process"のチェックを外します。
私の場合、どんな答えも役に立たなかった。それでも私のために働く解決策を見つけました。それはscalatestバージョンの問題でした。 pom.xmlへのアップグレード
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>2.2.4</version>
<scope>test</scope>
</dependency>
助けた
したがって、上記は私の問題を解決しませんでしたが、intellijに関連しています。
基本的に、依存関係からロードするのではなく、Class =:methodを解決するためにScala SDKを優先していました。
使った
-verbose:class
jVMスイッチで、それがどこを見ているのかを見せてくれます。 Scala SDKからクラスをロードしようとしているので、すぐに私にそれを教えてくれます(Mavenからlibsをプルすると予想されます)。
文字通りただScala SDKをプロジェクト設定から削除しましたそして問題は解消しました。これまでのところ、Scala(そして間違いなく混合Java環境)での経験)から、成熟する方法があると思います。これはこのような基本的なクラス/メソッドは、バージョン間で消えてしまったとは信じられません。インストールしたscalaバージョンは2.11でした。どうやら、取り込まれたのはmavenから2.10.4です。
「NoSuchMethodError」と表示されるときはいつでもalwaysはバージョンの競合があることを意味します。それは理由の問題です。
他の人がここで言ったように、2.11でscalatestを使用しているにもかかわらず、一部のライブラリーで2.10を使用していたため、同じ問題が発生していました。
<!-- http://www.scalactic.org/ -->
<dependency>
<groupId>org.scalactic</groupId>
<artifactId>scalactic_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
<!-- http://www.scalatest.org/ -->
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId>
<version>${scalactic.version}</version>
<scope>test</scope>
</dependency>
使用しているすべてのライブラリが同じであることを確認してくださいScala version
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
に
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
プロパティとして持つ
<properties>
<scala.tools.version>2.11.8</scala.tools.version>
<scala.version>2.11.8</scala.version>
<scalactic.version>3.0.0</scalactic.version>
<!-- Library Versions -->
<spark.version>2.0.0</spark.version>
....
</properties>
同じ問題が発生しました。私のプロジェクトは2.11.6を使用していますが、私はscala-library-2.10.xを含む間違ったバージョンのAkkaをダウンロードしたことがわかりました。 2.11.5を含む最新バージョンのAkkaを入手して問題を解決しました。
だから、これは互換性の問題のようですので、将来的に依存関係をチェックします。
私のプロジェクトのscala sdkバージョンを2.12から2.11に設定することでこれを解決しました。
Error Java.lang.NoSuchMethodError:scala.collection.immutable。$ colon $ colon.hd $ 1()Ljava/lang/Object
理由このエラーは、sparkとscalaの間のバージョンの不一致が原因です。spark 2.2を使用しているときにエラーが発生しました。 0とscala 2.10.6。その後、別のscalaバージョンに変更しましたが、成功しませんでした。
解決策このエラーは、scalaバージョンを2.11.6に変更したときにのみ解決されます。このバージョンは、spark 2.2.0。同じ問題でscalaのより高いバージョンを試すことができるかもしれませんが、2.12.xを試しましたが、機能しませんでした。
提案コーディングを行う前に、以下のバージョンを設定するように要求してください:spark-2.2.0 scala-2.11.6
また、私は以下のpomを使用しました:
<dependencies>
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.Apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
私は同じ問題を抱えています。マップ機能に変更すると動作します!理由はわかりませんが、それで修正できます。
これはscalatestとscalamockのバージョンが異なることが原因である可能性があることを発見しました。次のメイブン
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.11</artifactId><!-- this was previously 2.10 -->
<version>2.2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scalamock</groupId>
<artifactId>scalamock-scalatest-support_2.11</artifactId>
<version>3.2</version>
<scope>test</scope>
</dependency>
json4
を追加するときにも同じことがありました。私は、artifactIdをjson4s-native_2.12
から-json4s-native_2.11
に変更することで解決しました。これはscala使用しているバージョンは2.12ではなく2.11でした)に関連していると思います(pom.xml
ファイルのproperties
xmlノードで確認できます。私のものは<scala.version>2.11</scala.version>
です。)
バージョンの問題です。scala sdk version to 2.11を使用してください。