我正在编写mapReduce Job来读取和处理Avrofile.输入文件是Avro输出格式是Avro
当我执行Mapreduce Job时,我在reducer阶段遇到以下异常.当reducer抛出IOException时,我无法在reducer中捕获并消除它.Hue中的错误堆栈跟踪看起来
java.io.IOException: Invalid int encoding
at org.apache.avro.io.DirectBinaryDecoder.readInt(DirectBinaryDecoder.java:113)
at org.apache.avro.io.ValidatingDecoder.readInt(ValidatingDecoder.java:83)
at org.apache.avro.reflect.ReflectDatumReader.readInt(ReflectDatumReader.java:166)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:156)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:177)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:148)
at org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:206)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:150)
at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:177)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:148)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:139)
at org.apache.avro.hadoop.io.AvroDeserializer.deserialize(AvroDeserializer.
Run Code Online (Sandbox Code Playgroud)
谷歌搜索时,我注意到有一张阿帕奇JIRA票(https://issues.apache.org/jira/browse/AVRO-882).没有更新.
我正在使用AVRO-1.7.5,以下是依赖maven
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro</artifactId>
<version>1.7.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激?.谢谢
就我而言,这个问题很明显,因为我没有使用正确的架构来读取文档。
请记住,如果您正在读取的 Avro 文档的架构(写入器架构)与您正在读取的架构不同,则需要使用同时采用读取器和写入器架构的构造函数来构造 SpecificDatumReader。
new SpecificDatumReader<>(writerSchema, readerSchema)
Run Code Online (Sandbox Code Playgroud)
代替
new SpecificDatumReader<>(class)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |