저는 Avro와 협력 중이며 GenericRecord
입니다. 그것으로부터 clientId
, deviceName
, holder
을 추출하고 싶습니다. Avro 스키마에서 clientId
은 Integer이고 deviceName
은 String이고 holder
은 Map입니다. 아 브로 스키마의GenericRecord에서 입력 된 값을 얻는 방법은 무엇입니까?
{
"name" : "clientId",
"type" : [ "null", "int" ],
"doc" : "hello"
}
deviceName
: 다음 브로 스키마
{
"name" : "deviceName",
"type" : [ "null", "string" ],
"doc" : "test"
}
holder
다음 브로 스키마
clientId
{
"name" : "holder",
"type" : {
"type" : "map",
"values" : "string"
}
}
내 질문은 - 무엇이입니다 입력 된 값을 검색하는 권장 방법 개체?
아래 코드에서 payload
은 GenericRecord
이며 우리는이 스키마에서 avro 스키마를 얻을 수 있습니다. 이것은 내가 지금하고있는 일이며, 모든 것을 String으로 추출한다. 하지만 어떻게하면 입력 된 값을 얻을 수 있을까요? 어떤 방법이 있습니까? avro 스키마에있는 데이터 유형이 무엇이든 상관없이 추출해야합니다.
public static void getData(GenericRecord payload) {
String id = String.valueOf(payload.get("clientId"));
String name = String.valueOf(payload.get("deviceName"));
// not sure how to get maps here
}
그래서 나는 GenericRecord
에서 자바지도 Map<String, String>
같은 문자열로 정수로 clientId
, deviceName
및 holder
을 추출 할? 그렇게하는 가장 좋은 방법은 무엇입니까? 일반 레코드와 스키마를 통해 입력 된 모든 변환을 수행하는 유틸리티를 작성할 수 있습니까?
세 가지'payload.get' 호출에서 반환되는 객체 유형은 무엇입니까? – qxz
@qxz 의미? 나는 이해하지 못했다. 그것은 모든 것을 객체로 반환합니다. 그리고 나서 그것을 캐스팅해야합니다. 우리는 페이로드에서 스키마를 사용하고 결과를 변환하고 반환하는 유틸리티를 작성할 수 있다고 생각합니다. – john
각각에 대해'payload.get ("..."). getClass()를 인쇄 해보십시오.getCanonicalName()'객체의 타입을 확인한다 – qxz