Datastax Cassandra Driver lanzando CodecNotFoundException

La excepción exacta es la siguiente

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec no encontrado para la operación solicitada: [varchar <-> java.math.BigDecimal]

Estas son las versiones del software que estoy usando Spark 1.5 Datastax-cassandra 3.2.1 CDH 5.5.1

El código que estoy tratando de ejecutar es un programa Spark que usa la API de Java y básicamente lee datos (csv) de hdfs y los carga en tablas cassandra. Estoy usando el conector spark-cassandra. Inicialmente tuve muchos problemas con respecto al conflicto de la biblioteca de guayaba de google que pude resolver sombreando la biblioteca de guayaba y construyendo un contenedor instantáneo con todas las dependencias.

Sin embargo, pude cargar datos para algunos archivos, pero para algunos archivos obtengo la excepción Codec. Cuando investigué sobre este problema, obtuve estos siguientes hilos sobre el mismo problema.

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

Después de pasar por esta discusión, lo que entiendo es que es una versión incorrecta del controlador cassandra que estoy usando. O todavía hay un problema de ruta de clase relacionado con la biblioteca de guayaba, ya que cassandra 3.0 y versiones posteriores usan guava 16.0.1 y las discusiones anteriores dicen que podría haber una versión inferior de la guayaba presente en la ruta de clase.

Aquí está el archivo 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>

y estas son las dependencias que se descargaron usando el pom anterior

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

Arriba están algunas de las principales dependencias en mi jarra instantánea.

¿Y es la excepción CodecNotFoundException? ¿Es por la ruta de clase (guayaba)? o cassandra-driver (cassandra-driver-core-3.0.0-alpha4.jar para datastax cassandra 3.2.1) o debido al código.

Otro punto es todas las fechas que estoy insertando en columnas cuyo tipo de datos es la marca de tiempo.

Además, cuando hago un envío de chispa, veo la ruta de clase en los registros, hay otras versiones de guayaba que están bajo las librerías hadoop. R estas causando el problema?

¿Cómo especificamos una ruta de clase específica del usuario mientras hacemos un envío por chispa? ¿Eso ayudará?

Estaría encantado de obtener algunos puntos sobre estos. Gracias

El siguiente es el 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)

Yo tambien tengo

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta