Wie kann man das java.lang.Classcastexception-Fehler: cannot assign Instanz von scala.Sammlung.unveränderlich.Liste zu Feld Typ scala.Sammlung.Seq?
Diesen Fehler wurde das härteste zu verfolgen. Ich bin mir nicht sicher, was Los ist. Bei mir läuft ein Spark-cluster auf meinen Standort Maschine. also den gesamten spark-cluster ist unter einem host, die 127.0.0.1
und ich laufen auf einem standalone-Modus
JavaPairRDD<byte[], Iterable<CassandraRow>> cassandraRowsRDD= javaFunctions(sc).cassandraTable("test", "hello" )
.select("rowkey", "col1", "col2", "col3", )
.spanBy(new Function<CassandraRow, byte[]>() {
@Override
public byte[] call(CassandraRow v1) {
return v1.getBytes("rowkey").array();
}
}, byte[].class);
Iterable<Tuple2<byte[], Iterable<CassandraRow>>> listOftuples = cassandraRowsRDD.collect(); //ERROR HAPPENS HERE
Tuple2<byte[], Iterable<CassandraRow>> tuple = listOftuples.iterator().next();
byte[] partitionKey = tuple._1();
for(CassandraRow cassandraRow: tuple._2()) {
System.out.println("************START************");
System.out.println(new String(partitionKey));
System.out.println("************END************");
}
Diesen Fehler wurde das härteste zu verfolgen. Es klar passiert das bei cassandraRowsRDD.collect()
und ich weiß nicht, warum?
16/10/09 23:36:21 ERROR Executor: Exception in task 2.3 in stage 0.0 (TID 21)
java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2133)
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1305)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2006)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2000)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1924)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75)
at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:85)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
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)
Hier sind die Versionen, die ich verwende
Scala code runner version 2.11.8 //when I run scala -version or even ./spark-shell
compile group: 'org.apache.spark' name: 'spark-core_2.11' version: '2.0.0'
compile group: 'org.apache.spark' name: 'spark-streaming_2.11' version: '2.0.0'
compile group: 'org.apache.spark' name: 'spark-sql_2.11' version: '2.0.0'
compile group: 'com.datastax.spark' name: 'spark-cassandra-connector_2.11' version: '2.0.0-M3':
meinem gradle-Datei sieht wie folgt aus, nachdem die Einführung von etwas namens "versehen", der eigentlich gar nicht zu geben scheint, aber google sagte, zu erstellen, so meine bauen.gradle sieht wie folgt aus
group 'com.company'
version '1.0-SNAPSHOT'
apply plugin: 'java'
apply plugin: 'idea'
repositories {
mavenCentral()
mavenLocal()
}
configurations {
provided
}
sourceSets {
main {
compileClasspath += configurations.provided
test.compileClasspath += configurations.provided
test.runtimeClasspath += configurations.provided
}
}
idea {
module {
scopes.PROVIDED.plus += [ configurations.provided ]
}
}
dependencies {
compile 'org.slf4j:slf4j-log4j12:1.7.12'
provided group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.0.0'
provided group: 'org.apache.spark', name: 'spark-streaming_2.11', version: '2.0.0'
provided group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.0.0'
provided group: 'com.datastax.spark', name: 'spark-cassandra-connector_2.11', version: '2.0.0-M3'
}
jar {
from { configurations.provided.collect { it.isDirectory() ? it : zipTree(it) } }
//with jar
from sourceSets.test.output
manifest {
attributes 'Main-Class': "com.company.batchprocessing.Hello"
}
exclude 'META-INF/.RSA', 'META-INF/.SF', 'META-INF/*.DSA'
zip64 true
}
Ich fixierte diese mit "forking" scala-sbt.org/release/docs/Forking.html
InformationsquelleAutor user1870400 | 2016-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das gleiche Problem und konnte es beheben, indem meine Anwendung jar zu spark ' s classpath mit
Ich denke, dass, wenn Sie tun, jede Art von
map
Betrieb mit einem lambda-das bezieht sich auf die Methoden/classes von Ihrem Projekt, die Sie benötigen, um Sie als zusätzliche jar. Funken tut serialisiert die lambda selbst, aber nicht an einem Strang ziehen, Ihre Abhängigkeiten. Nicht sicher, warum die Fehlermeldung nicht informativ überhaupt.InformationsquelleAutor Holger Brandl
Habe ich Treffer die gleiche Ausnahme und Graben sich in mehrere Verwandte Jiras (Neun tausend zwei hundert neunzehn, Zwölf tausend sechs hundert fünf und siebzig, Achtzehn tausend fünf und siebzig).
Glaube ich, dass die exception name ist verwirrend, und das eigentliche problem ist die inkonsistente Umgebung-Einstellungen zwischen der spark-cluster und die Treiber-Anwendung.
Zum Beispiel, begann ich meine Spark-cluster mit der folgenden Zeile in
conf/spark-defaults.conf
:während ich begann meine Treiber-Programm (auch das Programm gestartet wird, mit
spark-submit
) mit einer Linie:in denen die
<master ip>
ist die korrekte IP-Adresse des Knotensmaster
ist, aber das Programm würde scheitern, durch diese einfache Inkonsistenz.Als Ergebnis würde ich empfehlen, alle Treiber, Anwendungen gestartet werden mit
spark-submit
und duplizieren nicht jede Konfiguration im Treiber-code (es sei denn, Sie überschreiben müssen einige config). Nämlich, lass diespark-submit
legen Sie Ihre Umgebung mit der gleichen Art und Weise, in der ausgeführt Spark-cluster.InformationsquelleAutor Ambling
Sie call () - Methode zurückgeben soll, byte[] wie unten.
Wenn Sie immer noch das Problem, dann überprüfen Sie die Versionen der Abhängigkeiten wie oben im Jira - https://issues.apache.org/jira/browse/SPARK-9219
Ich sah, dass link und ich konnte nicht herausfinden, was Los ist es deshalb klebte ich alle meine Versionen, die ich verwende. Ich bin mit Java 8 also ich weiß wirklich nicht scala Zeug, und ich verstehe nicht, was die Kennzeichnung der Bibliothek "zur Verfügung gestellt" bedeutet
Getestet habe ich den code und es funktioniert im standalone-Modus mit Funken-2.0.0. Versuchen Sie, reinigen Sie Ihre build-Umgebung wieder aufzubauen und zu testen. "" Abhängigkeit bedeutet jar wird zur Laufzeit verfügbar. Bitte überprüfen Sie maven.apache.org/guides/introduction/...
Haben Sie markieren Sie so geleistet? Wenn ja, welche Bibliotheken von denen, die über Sie markiert diese zur Verfügung gestellt?
Ich bin mit der Funke java-Programm in eclipse mit maven-Abhängigkeiten, so bin ich nicht markieren. Wenn Sie ausführen möchten bauen jar im cluster der Verwendung von spark-Einreichen und möchte die Funke vorausgesetzt, Gläser können Sie dann markieren Sie Sie als zur Verfügung gestellt. Bitte überprüfen Sie die jar-Dateien und-Versionen in Ihrer build-Umgebung und cluster-Umgebung.
InformationsquelleAutor abaghel
In meinem Fall musste ich hinzufügen
spark-avro
Glas (ich habe es in/lib
Ordner neben die Haupt-jar):InformationsquelleAutor Nikita Bosik
Überprüfen Sie code - In Intellij: Analysieren... -> zum Inspizieren von code. Wenn Sie veraltete Methoden verwandt zu serialisieren, es zu beheben. Oder versuchen Sie einfach zu reduzieren Spark o Scala-version. In meinem Fall habe ich reduzieren Scala version 2.10, und alle arbeiteten.
InformationsquelleAutor Valeriy K.