Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从特定Java对象生成Avro模式_Java_Serialization_Avro_Jsonschema - Fatal编程技术网

从特定Java对象生成Avro模式

从特定Java对象生成Avro模式,java,serialization,avro,jsonschema,Java,Serialization,Avro,Jsonschema,ApacheAvro为序列化提供了一种紧凑、快速、二进制数据格式和丰富的数据结构。然而,它需要用户为需要序列化的对象定义一个模式(JSON) 在某些情况下,这是不可能的(例如:该Java对象的类有一些成员,其类型是外部库中的外部Java类)。因此,我想知道是否有一种工具可以从对象的.class文件中获取信息,并为该对象生成Avro模式(如Gson使用对象的.class信息将某些对象转换为JSON字符串)。请看一看 获取架构的过程如下所示: Schema schema = ReflectData.

ApacheAvro为序列化提供了一种紧凑、快速、二进制数据格式和丰富的数据结构。然而,它需要用户为需要序列化的对象定义一个模式(JSON)

在某些情况下,这是不可能的(例如:该Java对象的类有一些成员,其类型是外部库中的外部Java类)。因此,我想知道是否有一种工具可以从对象的.class文件中获取信息,并为该对象生成Avro模式(如Gson使用对象的.class信息将某些对象转换为JSON字符串)。

请看一看

获取架构的过程如下所示:

Schema schema = ReflectData.get().getSchema(T);

这个答案的学分属于肖恩·巴斯比。

以下是如何

**范例**

波乔班

public class ExportData implements Serializable {
    private String body;
    // ... getters and setters
}
连载

File file = new File(fileName);
DatumWriter<ExportData> writer = new ReflectDatumWriter<>(ExportData.class);
DataFileWriter<ExportData> dataFileWriter = new DataFileWriter<>(writer);
Schema schema = ReflectData.get().getSchema(ExportData.class);
dataFileWriter.create(schema, file);
for (Row row : resultSet) {
    String rec = row.getString(0);
    dataFileWriter.append(new ExportData(rec));
}
dataFileWriter.close();

File File=新文件(文件名);
DatumWriter=新的反射DatumWriter(ExportData.class);
DataFileWriter DataFileWriter=新的DataFileWriter(writer);
Schema Schema=ReflectData.get().getSchema(ExportData.class);
创建(模式,文件);
用于(行:结果集){
String rec=row.getString(0);
追加(新的导出数据(rec));
}
dataFileWriter.close();
反序列化

File file = new File(avroFilePath);
DatumReader<ExportData> datumReader = new ReflectDatumReader<>(ExportData.class);
DataFileReader<ExportData> dataFileReader = new DataFileReader<>(file, datumReader);
ExportData record = null;
while (dataFileReader.hasNext()){
    record = dataFileReader.next(record);
    // process record
}
File File=新文件(avroFilePath);
DatumReader DatumReader=新的ReflectDatumReader(ExportData.class);
DataFileReader DataFileReader=新的DataFileReader(文件,datumReader);
ExportData记录=null;
while(dataFileReader.hasNext()){
record=dataFileReader.next(记录);
//过程记录
}

有趣的问题。有一个工具可以从Java类生成JSON模式(jsonschema2pojo),我有一个工具可以从JSON模式生成Avro模式(JSON模式Avro)。但是,前一个工具只能生成JSON模式v3,而我的工具是JSON模式v4作为输入…感谢您的回答,您的意思是您编写了一个可以从JSON模式转换Avro模式的工具吗?是的,我的意思是:
File file = new File(avroFilePath);
DatumReader<ExportData> datumReader = new ReflectDatumReader<>(ExportData.class);
DataFileReader<ExportData> dataFileReader = new DataFileReader<>(file, datumReader);
ExportData record = null;
while (dataFileReader.hasNext()){
    record = dataFileReader.next(record);
    // process record
}