下面的代碼簡單地將數據寫入到的Avro格式和讀取並顯示從書面太Avro的文件相同。我只是嘗試了Hadoop權威指南書中的示例。我第一次能夠執行這個任務。然後我得到以下錯誤。它第一次工作。所以我不確定我犯的錯誤。寫Avro的數據文件
這是例外:
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:2173)
at org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2106)
at org.codehaus.jackson.map.ObjectMapper.readTree(ObjectMapper.java:1065)
at org.codehaus.jackson.map.ObjectMapper.readTree(ObjectMapper.java:1040)
at org.apache.avro.Schema.parse(Schema.java:895)
at org.avro.example.SimpleAvro.AvroExample.avrocreate(AvroDataExample.java:23)
at org.avro.example.SimpleAvro.AvroDataExample.main(AvroDataExample.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
這是代碼:
package org.avro.example.SimpleAvro;
import java.io.File;
import java.io.IOException;
import org.apache.avro.Schema;
import org.apache.avro.file.DataFileReader;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.generic.GenericData;
import org.apache.avro. generic.GenericDatumReader;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.DatumWriter;
class AvroExample{
AvroExample(){
}
void avrocreate() throws Exception{
Schema schema=Schema.parse(getClass().getResourceAsStream("Pair.avsc"));
GenericRecord datum=new GenericData.Record(schema);
datum.put("left", "L");
datum.put("right", "R");
File file=new File("data.avro");
DatumWriter<GenericRecord> writer=new GenericDatumWriter<GenericRecord>(schema);
DataFileWriter<GenericRecord> dataFileWriter=new DataFileWriter<GenericRecord>(writer);
dataFileWriter.create(schema, file);
dataFileWriter.append(datum);
dataFileWriter.close();
System.out.println("Written to avro data file");
//reading from the avro data file
DatumReader<GenericRecord> reader= new GenericDatumReader<GenericRecord>();
DataFileReader<GenericRecord> dataFileReader=new DataFileReader<GenericRecord>(file,reader);
GenericRecord result=dataFileReader.next();
System.out.println("data" + result.get("left").toString());
result=dataFileReader.next();
System.out.println("data :" + result.get("left").toString());
}
}
public class AvroDataExample {
public static void main(String args[])throws Exception{
AvroExample a=new AvroExample();
a.avrocreate();
}
}
以下是文件[書中的示例代碼給出]的Pair.avsc
{
"type": "record",
"name": "Pair",
"doc": "A pair of strings.",
"fields": [
{"name": "left", "type": "string"},
{"name": "right", "type": "string"}
]
}
當我試圖嵌入模式作爲一個字符串,我能夠成功地運行該程序。 – Sri 2011-04-05 00:06:05