0
我正在和Avro合作,我有一個GenericRecord
。我想提取dataTimestamp
,processTimestamp
,clientId
,processId
和deviceId
從goldenHeader
的值。如何從Avro的RECORD類型獲取輸入值?
"fields" : [ {
"name" : "goldenHeader",
"type" : {
"type" : "record",
"name" : "GoldenHeader",
"fields" : [ {
"name" : "dataTimestamp",
"type" : "long"
}, {
"name" : "processTimestamp",
"type" : "long"
}, {
"name" : "clientId",
"type" : "int"
}, {
"name" : "processId",
"type" : [ "null", {
"type" : "string",
"avro.java.string" : "String"
} ]
}, {
"name" : "deviceId",
"type" : {
"type" : "string",
"avro.java.string" : "String"
}
} ]
},
"doc" : "Golden header"
},
.. some other fields
]
我GenericRecord
看起來是這樣的,當我們得到的數據:
{"goldenHeader": {"dataTimestamp": 1481055083500, "processTimestamp": 1481055085524, "clientId": 1234, "processId": null, "deviceId": "ducer"}}
現在我搞不清我怎麼可以提取單個字段從goldenHeader
這是一個RECORD
類型。當我爲goldenHeader
打印出來的類名我看到這一點:
org.apache.avro.generic.GenericData.Record
下面是我已經拿到了代碼,但我搞不清什麼做下一個:
public static Object fromAvro(Object obj, Schema schema) {
if (obj == null) {
return null;
}
System.out.println(schema.getType());
switch (schema.getType()) {
case RECORD:
// not sure what to do here
}
}
什麼是做的最好的方法這個?
那麼我沒有任何pojo的東西在這裏。所以我需要以某種方式手動提取它。 – john
你的意思是當你做'obj.getClass()'它返回'java.lang.Object'嗎?然後我不確定你是否真的將數據傳遞給Java。 – Adam