下面是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
接口
因此,我尝试更改成员的数据类型 dataDate
至 java.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插入它呢
1条答案
按热度按时间6pp0gazn1#
java驱动程序可以与
LocalDate
只有在添加带有可选编解码器的jar并注册它们的情况下,才可以从java8开始—但是还不清楚是否可以在beam作业中拦截到cassandra的连接的建立。您需要向pom.xml添加以下依赖项(调整版本以匹配beam中驱动程序的版本):
并在某处注册编解码器:
看着横梁,它看起来像是用跟腱支撑
@Codec
注解,并且已经包括可选的编解码器,因此您可以使用@Codec(com.datastax.driver.extras.codecs.jdk8.InstantCodec.class)
.如果它不支持achiles,而是使用java驱动程序中的对象Map器,则可以使用以下注解:
@Column(codec = com.datastax.driver.extras.codecs.jdk8.InstantCodec.class)