Datastax Cassandra Driver wirft CodecNotFoundException

Die genaue Ausnahme ist wie folgt

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec für angeforderte Operation nicht gefunden: [varchar <-> java.math.BigDecimal]

Dies sind die Versionen der Software, die ich verwende. Spark 1.5 Datastax-cassandra 3.2.1 CDH 5.5.1

Der Code, den ich ausführen möchte, ist ein Spark-Programm, das die Java-API verwendet, und liest im Grunde genommen Daten (CSVs) aus HDFS und lädt sie in Cassandra-Tabellen. Ich benutze den Spark-Cassandra-Stecker. Ich hatte anfangs viele Probleme mit dem Konflikt in Bezug auf die Guavenbibliothek von Google, die ich lösen konnte, indem ich die Guavenbibliothek schattierte und ein Schnappschussglas mit allen Abhängigkeiten baute.

Jedoch konnte ich Daten für einige Dateien laden, aber für einige Dateien erhalte ich die Codec-Ausnahme. Als ich zu diesem Thema recherchiert habe, habe ich die folgenden Threads zum selben Thema erhalten.

https: //groups.google.com/a/lists.datastax.com/forum/#! topic / java-driver-user / yZyaOQ-wazk

https: //groups.google.com/a/lists.datastax.com/forum/#! topic / java-driver-user / yZyaOQ-wazk

Nach dieser Diskussion verstehe ich, dass es sich entweder um eine falsche Version des von mir verwendeten Cassandra-Treibers handelt. Oder es gibt immer noch ein Problem mit dem Klassenpfad in Bezug auf die Guavenbibliothek, da Cassandra 3.0 und spätere Versionen Guava 16.0.1 verwenden und die obigen Diskussionen besagen, dass möglicherweise eine niedrigere Version der Guave im Klassenpfad vorhanden ist.

Hier ist die Datei pom.xml

 <dependencies>
 <dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.5.0</version> 
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
</dependency>
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector-java_2.10</artifactId>
<version>1.5.0-M3</version>
</dependency>
<dependency>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-clientutil</artifactId>
<version>3.2.1</version>
</dependency>

</dependencies>
  <build>
<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>shade</goal>
                </goals>
                <configuration>
                 <filters>
    <filter>
        <artifact>*:*</artifact>
        <excludes>
            <exclude>META-INF/*.SF</exclude>
            <exclude>META-INF/*.DSA</exclude>
            <exclude>META-INF/*.RSA</exclude>
        </excludes>
    </filter>
</filters>
                    <relocations>
                        <relocation>
                            <pattern>com.google</pattern>
                            <shadedPattern>com.pointcross.shaded.google</shadedPattern>
                        </relocation>

                    </relocations>
                    <minimizeJar>false</minimizeJar>
                    <shadedArtifactAttached>true</shadedArtifactAttached>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>
</build>
</project>

und dies sind die Abhängigkeiten, die mit dem obigen Befehl pom @ heruntergeladen wurde

spark-core_2.10-1.5.0.jar
spark-cassandra-connector-   java_2.10-1.5.0-M3.jar
spark-cassandra-connector_2.10-1.5.0-M3.jar
spark-repl_2.10-1.5.1.jar
spark-bagel_2.10-1.5.1.jar
spark-mllib_2.10-1.5.1.jar
spark-streaming_2.10-1.5.1.jar
spark-graphx_2.10-1.5.1.jar
guava-16.0.1.jar
cassandra-clientutil-3.2.1.jar
cassandra-driver-core-3.0.0-alpha4.jar

Above sind einige der Hauptabhängigkeiten in meinem Schnappschussglas.

Y ist die CodecNotFoundException? Liegt es am Klassenpfad (Guave)? oder cassandra-driver (cassandra-driver-core-3.0.0-alpha4.jar für datastax cassandra 3.2.1) oder aufgrund des Codes.

Ein weiterer Punkt sind alle Daten, die ich in Spalten einfüge, deren Datentyp der Zeitstempel ist.

Auch wenn ich einen Spark-Submit mache, sehe ich den Klassenpfad in den Protokollen. Es gibt andere Guaven-Versionen, die sich unter den Hadoop-Bibliotheken befinden. Verursachen diese das Problem?

Wie geben wir einen benutzerspezifischen Klassenpfad an, während wir eine Funkenübertragung durchführen? Hilft das?

Würde mich freuen, ein paar Punkte dazu zu bekommen. Vielen Dan

Folgen ist der Stacktrace

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [timestamp <-> java.lang.String]
at com.datastax.driver.core.CodecRegistry.notFound(CodecRegistry.java:689)
at com.datastax.driver.core.CodecRegistry.createCodec(CodecRegistry.java:550)
at com.datastax.driver.core.CodecRegistry.findCodec(CodecRegistry.java:530)
at com.datastax.driver.core.CodecRegistry.codecFor(CodecRegistry.java:485)
at com.datastax.driver.core.AbstractGettableByIndexData.codecFor(AbstractGettableByIndexData.java:85)
at com.datastax.driver.core.BoundStatement.bind(BoundStatement.java:198)
at com.datastax.driver.core.DefaultPreparedStatement.bind(DefaultPreparedStatement.java:126)
at com.cassandra.test.LoadDataToCassandra$1.call(LoadDataToCassandra.java:223)
at com.cassandra.test.LoadDataToCassandra$1.call(LoadDataToCassandra.java:1)
at org.apache.spark.api.java.JavaPairRDD$anonfun$toScalaFunction$1.apply(JavaPairRDD.scala:1027)
at scala.collection.Iterator$anon$11.next(Iterator.scala:328)
at org.apache.spark.util.Utils$.getIteratorSize(Utils.scala:1555)
at org.apache.spark.rdd.RDD$anonfun$count$1.apply(RDD.scala:1121)
at org.apache.spark.rdd.RDD$anonfun$count$1.apply(RDD.scala:1121)
at org.apache.spark.SparkContext$anonfun$runJob$5.apply(SparkContext.scala:1850)
at org.apache.spark.SparkContext$anonfun$runJob$5.apply(SparkContext.scala:1850)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
at org.apache.spark.scheduler.Task.run(Task.scala:88)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
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)

Ich habe auch

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [Math.BigDecimal <-> java.lang.String]

Antworten auf die Frage(4)

Ihre Antwort auf die Frage