Драйвер Datastax Cassandra выдает исключение CodecNotFoundException

Точное исключение заключается в следующем

com.datastax.driver.core.exceptions.CodecNotFoundException: кодек не найден для запрошенной операции: [varchar <-> java.math.BigDecimal]

Это версии ПО, которые я использую Spark 1.5 Datastax-cassandra 3.2.1 CDH 5.5.1

Код, который я пытаюсь выполнить, - это программа Spark, использующая API Java, которая в основном считывает данные (csv) из hdf и загружает их в таблицы cassandra. Я использую спарк-кассандра-разъем. У меня было много проблем, связанных с конфликтом библиотеки гуавы в google, которые я смог решить, закрасив библиотеку гуавы и создав банку моментального снимка со всеми зависимостями.

Однако я смог загрузить данные для некоторых файлов, но для некоторых файлов я получил Исключение кодека. Когда я исследовал эту проблему, я получил следующие темы по той же проблеме.

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

После этих обсуждений я понимаю, что это неверная версия драйвера cassandra, который я использую. Или все еще существует проблема пути к классу, связанная с библиотекой guava, поскольку cassandra 3.0 и более поздние версии используют guava 16.0.1, и в приведенных выше обсуждениях говорится, что в пути к классу может присутствовать более низкая версия guava.

Вот файл 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>

и это зависимости, которые были загружены с помощью вышеуказанного POM

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

Выше приведены некоторые основные зависимости в моей банке снимка.

Y является CodecNotFoundException? Это из-за пути к классу (гуава)? или cassandra-driver (cassandra-driver-core-3.0.0-alpha4.jar для dasastax cassandra 3.2.1) или из-за кода.

Другой момент - все даты, которые я вставляю в столбцы, у которых тип данных - метка времени.

Также, когда я делаю искру-отправку, я вижу путь к классам в журналах. Есть другие версии гуавы, которые находятся под библиотеками hadoop. R это вызывает проблему?

Как мы указываем пользовательский путь к классу во время выполнения spark-submit. Это поможет?

Был бы рад получить несколько баллов по этим вопросам. Спасибо

Следующее является следом стека

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)

Я тоже получил

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [Math.BigDecimal <-> java.lang.String]
 Syed Ammar Mustafa06 июн. 2016 г., 09:05
Я поделился трассировкой стека
 Andy Tolbert02 июн. 2016 г., 13:49
Можете ли вы поделиться трассировкой стека?

Ответы на вопрос(2)

Вот

Правильные отображения, которые драйвер предлагает из коробки для временных типов:

    DATE      <-> com.datastax.driver.core.LocalDate : use getDate()
Решение Вопроса

bind(params...) наPreparedStatement драйвер ожидает, что вы предоставите значения с типами java, которые сопоставляются с типами cql.

Эта ошибка ([timestamp <-> java.lang.String]) говорит, что нет зарегистрированного такого кодека, который отображает JavaString в cqltimestamp, В драйвере Java,timestamp введите карты вjava.util.Date, Итак, у вас есть 2 варианта здесь:

Если столбец привязан к отметке времени, укажитеDateзначение вместоString.Создать кодек, который отображаетtimestamp <-> String, Для этого вы можете создать подклассMappingCodec как описано насайт документации, который отображает строку в метку времени:
public class TimestampAsStringCodec extends MappingCodec<String, Date> {
    public TimestampAsStringCodec() { super(TypeCodec.timestamp(), String.class); }

    @Override
    protected Date serialize(String value) { ... }

    @Override
    protected String deserialize(Date value) { ... }
}

Затем вам нужно будет зарегистрировать кодек:

cluster.getConfiguration().getCodecRegistry()
    .register(new TimestampAsStringCodec());
 Syed Ammar Mustafa07 июн. 2016 г., 07:01
Спасибо, я предоставляю значение типа даты сейчас. Еще одна вещь - достаточно ли стабильна cassandra-driver-core-3.0.0-alpha4.jar? Когда я пробую другие драйверы, такие как cassandra-driver-core-3.0.0 или 3.0.1, я получаю следующее исключение: ошибка DEFAULT_SSL_CIPHER_SUITES.
 Vinod Jayachandran07 нояб. 2016 г., 07:13
У меня есть тип столбца таблицы cassandra как timeuuid. Можете ли вы предложить, какой должен быть тип данных в классе Datastax Mapper?
 metadaddy08 мар. 2017 г., 20:15
@VinodJayachandran Вы бы продлилиMappingCodec<String, UUID> и позвонитьsuper(TypeCodec.timeUUID(), String.class); в конструкторе.
 Andy Tolbert07 июн. 2016 г., 15:23
Насколько я помню, в альфа-4 не было каких-либо серьезных ошибок, но при этом было сказано, что это альфа, и использование версии GA (желательно 3.0.2) было бы лучшим выбором. Можете ли вы создать новый вопрос с ошибкой DEFAULT_SSL_CIPHER_SUITES? Одно из изменений, которое было сделано в 3.0, заключалось в том, чтобы не требовать явного указания комплектов шифров. Я предполагаю, что это как-то связано с этим.

Ваш ответ на вопрос