cassandraio:插入日期字段无效

brjng4g3  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(333)

下面是cassandra表的示例定义; CREATE TABLE IF NOT EXISTS test_table ( id int, data_date date, score double, PRIMARY KEY (id) ); 我创建了一个testtable类 Serializable 以及成员 dataDate 数据类型已定义为 com.datastax.driver.core.LocalDate .
但是,当我尝试使用cassandraio.write编写此数据时,我会遇到错误 Caused by: java.io.NotSerializableException: com.datastax.driver.core.LocalDate 我知道这个错误是因为com.datastax.driver.core.localdate没有实现 Serializable 接口
因此,我尝试更改成员的数据类型 dataDatejava.time.LocalDate 但是这种变化会导致错误

java.lang.RuntimeException:org.apache.beam.sdk.util.UserCodeException:java.util.concurrent.ExecutionException:
com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [date <-> java.time.LocalDate]

所以问题是;如果我在cassandra中有一列数据类型date,那么如何使用apachebeam的cassandraio插入它呢

6pp0gazn

6pp0gazn1#

java驱动程序可以与 LocalDate 只有在添加带有可选编解码器的jar并注册它们的情况下,才可以从java8开始—但是还不清楚是否可以在beam作业中拦截到cassandra的连接的建立。
您需要向pom.xml添加以下依赖项(调整版本以匹配beam中驱动程序的版本):

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-extras</artifactId>
  <version>3.8.0</version>
</dependency>

并在某处注册编解码器:

import com.datastax.driver.extras.codecs.jdk8.LocalDateCodec;
import java.time.Instant;

cluster.getConfiguration().getCodecRegistry()
    .register(LocalDateCodec.instance);

看着横梁,它看起来像是用跟腱支撑 @Codec 注解,并且已经包括可选的编解码器,因此您可以使用 @Codec(com.datastax.driver.extras.codecs.jdk8.InstantCodec.class) .
如果它不支持achiles,而是使用java驱动程序中的对象Map器,则可以使用以下注解: @Column(codec = com.datastax.driver.extras.codecs.jdk8.InstantCodec.class)

相关问题