私はAvroと協力しており、GenericRecord
があります。そこからclientId
、deviceName
、holder
を抽出したいと思います。 Avroスキーマでは、clientId
はInteger、deviceName
はString、holder
はMapです。アブロスキーマ内GenericRecordから型付き値を取得するには?
{
"name" : "deviceName",
"type" : [ "null", "string" ],
"doc" : "test"
}
holder
:アブロスキーマ内
{
"name" : "clientId",
"type" : [ "null", "int" ],
"doc" : "hello"
}
deviceName
:アブロスキーマ内
clientId
{
"name" : "holder",
"type" : {
"type" : "map",
"values" : "string"
}
}
私の質問は - 何ですかタイプされた値を取得するための推奨された方法オブジェクト?
は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
からJavaマップMap<String, String>
として文字列として整数、deviceName
としてclientId
とholder
を抽出したいですか?それをする最善の方法は何ですか?一般的なレコードとスキーマで与えられたすべての型付き変換を行うユーティリティを書くことはできますか?
3種類の 'payload.get'呼び出しから返されるオブジェクトのタイプは何ですか? – qxz
@qxz意味ですか?理解できませんでした。それはオブジェクトとしてすべてを返し、あなたはそれを見えるようにキャストしなければなりません。ペイロードからスキーマを使用し、結果を変換して返すユーティリティを書くことができると思います。 – john
それぞれについて、 'payload.get(" ... ")。getClass()を印刷してみてください。オブジェクトの型を見るためにgetCanonicalName()を呼び出す – qxz