我正在尝试使用maven加载avro架构文件。我已经在我的类路径中保存了avsc文件但是在运行它时我得到了EOFEception。我知道问题在于无法找到模式文件,因为当我在代码中编写模式时,它运行得很好。我需要一些帮助。谢谢。
这是跟踪:
[root@dev MapReduce]# hadoop jar target/MapReduce-0.0.1-SNAPSHOT.jar com.hadoop.bi.MapReduce.AvroScTest StringPair.avsc
Exception in thread "main" java.io.EOFException: No content to map to Object due to end of input
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2444)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2377)
at org.codehaus.jackson.map.ObjectMapper.readTree(ObjectMapper.java:1234)
at org.codehaus.jackson.map.ObjectMapper.readTree(ObjectMapper.java:1209)
at org.apache.avro.Schema$Parser.parse(Schema.java:931)
at org.apache.avro.Schema$Parser.parse(Schema.java:914)
at com.hadoop.bi.MapReduce.AvroScTest.main(AvroScTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.main(RunJar.java:208)
以下是我尝试加载架构的代码:
Schema.Parser parser = new Schema.Parser();
Schema schema =parser.parse(AvroScTest.class.getResourceAsStream(args[0]));
这是项目的结构:
MapReduce
src
main
test
target
classes
MapReduce-0.0.1-SNAPSHOT.jar
pom.xml
StringPair.avsc
架构内容:
{
"type": "record",
"name": "StringPair",
"doc": "A pair of strings.",
"fields": [
{"name": "left", "type": "string"},
{"name": "right", "type": "string"}
]
}
答案 0 :(得分:0)
您可以通过
确定StringPair.avsc
文件在您的jar中
mvn tf MapReduce-0.0.1-SNAPSHOT.jar
(如果未列出maven,只要将其置于jar中,如果将其放在src/main/resources/StringPair.avsc
下)
对于“由于输入结束而没有要映射到对象的内容”错误消息,我可以在文件名之前放置一个斜杠,因为它位于jar的根目录中。
Schema.Parser parser = new Schema.Parser();
Schema schema =parser.parse(AvroScTest.class.getResourceAsStream("/StringPair.avsc"));