我从下面的代码
获得了字节数组public static byte[] jsonToAvro(String json, Schema schema) throws IOException {
DatumReader<Object> reader = new GenericDatumReader<>(schema);
GenericDatumWriter<Object> writer = new GenericDatumWriter<>(schema);
ByteArrayOutputStream output = new ByteArrayOutputStream();
Decoder decoder = DecoderFactory.get().jsonDecoder(schema, json);
Encoder encoder = EncoderFactory.get().binaryEncoder(output, null);
Object datum = reader.read(null, decoder);
writer.write(datum, encoder);
encoder.flush();
output.close();
System.out.println("Serialization: " + output);
return output.toByteArray(); }
这里output.toByteArray()包含avro的字节数组。
FileUtils.writeByteArrayToFile(new File("C:\\Users\\xyz\\workspace\\JasonToAvro\\src\\main\\java\\json\\avro\\test.avro"), avroByteArray)
File Avro_file = new File("C:\\Users\\xyz\\workspace\\JasonToAvro\\src\\main\\java\\json\\avro\\test.avro");
static void fromAvroToParquet( File avroFile ) throws IOException{
GenericDatumReader<Object> greader = new GenericDatumReader<Object>();
FileReader<Object> fileReader = DataFileReader.openReader(avroFile, greader);
Schema avroSchema = fileReader.getSchema() ; //further code
当我尝试将其转换为带.avro扩展名的文件时,我收到错误&#34;不是Avro数据文件&#34;。
Exception in thread "main" java.io.IOException: Not an Avro data file
at org.apache.avro.file.DataFileReader.openReader(DataFileReader.java:63)
at org.apache.avro.file.DataFileReader.openReader(DataFileReader.java:42)
at json.avro.JasonToAvro.JasonToAvro.fromAvroToParquet(JasonToAvro.java:81)
at json.avro.JasonToAvro.JasonToAvro.main(JasonToAvro.java:39)
我指的是此博客http://avrotoparquet.blogspot.in/2014/09/convert-avro-file-to-parquet-format.html,以便进行木地板转换。欢迎使用其他任何转换方法。