首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kafka AVRO -从long转换为datetime

Kafka AVRO -从long转换为datetime
EN

Stack Overflow用户
提问于 2017-12-18 19:48:08
回答 3查看 5.1K关注 0票数 5

当我想要发送一条AVRO消息,其中包含一个类型为long的字段时,我得到了以下错误:

代码语言:javascript
运行
复制
Caused by: org.apache.kafka.common.errors.SerializationException: Error deserializing Avro message for id 61
Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to org.joda.time.DateTime

我使用Confluent 3.2.0和Apache Spark 2.2.0。此错误在Spark Job中抛出,该作业处理AVRO消息并在控制台中打印它们。在AVRO模式中,对应的字段定义如下:

代码语言:javascript
运行
复制
{\"name\": \"event_time\", \"type\": { \"type\" : \"long\", \"logicalType\": \"timestamp-millis\"}}

.avsc文件生成的Java类中,该字段定义如下:

代码语言:javascript
运行
复制
private DateTime event_time;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-17 04:50:53

我在使用Confluent 4.0.0和Avro 1.8.2时遇到了类似的问题。我有一个流处理器,它试图将long类型转换为DateTime类型。我通过添加正确的转换克服了这个问题。在开始任何处理逻辑之前,我使用了Specific Data静态实用程序类并添加了正确的逻辑类型转换。

代码语言:javascript
运行
复制
SpecificData.get().addLogicalTypeConversion(new TimeConversions.TimestampConversion());
票数 12
EN

Stack Overflow用户

发布于 2019-10-08 21:39:55

在Avro 1.9.X和更高版本中,符号TimestampConversion不再存在。将@user3222582中的上述代码替换为TimestampMillisConversion修复了avro 1.9.2中的编译错误

票数 2
EN

Stack Overflow用户

发布于 2020-01-28 14:49:42

尝试将avro依赖中的avro版本和pom.xml中的avro-maven-plugin升级到1.9.X

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro</artifactId>
    <version>1.9.1</version>
</dependency>

<plugin>
    <groupId>org.apache.avro</groupId>
    <artifactId>avro-maven-plugin</artifactId>
    <version>1.9.1</version>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>schema</goal>
                <!--<goal>idl-protocol</goal>-->
            </goals>
            <configuration>
                <sourceDirectory>${project.basedir}/src/main/avro</sourceDirectory>
                <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
                <enableDecimalLogicalType>true</enableDecimalLogicalType>
                <stringType>String</stringType>
            </configuration>
        </execution>
    </executions>
</plugin>

还要确保从AVRO模式中删除以前生成的类,并执行mvn编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47867866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档