【问题标题】:How to extract Map typed from GenericRecord in Avro?如何提取从 Avro 中的 GenericRecord 输入的地图?
【发布时间】:2016-05-23 22:03:49
【问题描述】:

我有一个通用记录,如下所示,其中holder 是一个值作为字符串的映射。

 {
    "name" : "holder",
    "type" : {
      "type" : "map",
      "values" : "string"
    }
  }

以下是持有人地图的数据:

"holder": {
    "cossn": "0",
    "itwrqm": "20003"
}

我想在 String 和 String 的 Map 中提取持有者数据。我不确定我该怎么做?我尝试了两个选项,如下所示:

这个返回对象:

GenericRecord record = decoder.decode(data.value());    
Object holder = record.get("holder");

这会返回 Map,但我并没有真正看到它是键和值的映射。

GenericRecord record = decoder.decode(data.value());    
Map<String, String> holder = (Map<String, String>) record.get("holder");

当我打印holder 时,我看到这样显然不是键/值映射。我在做什么错?以及如何提取从GenericRecord输入的map?

{cossn=0, itwrqm=200006033213}

【问题讨论】:

    标签: java dictionary avro


    【解决方案1】:

    尝试使用

    HashMap<Utf8, Utf8> holder = (HashMap<Utf8, Utf8>) record.get("holder");
    

    并通过

    访问您的持有人物品
    String itwrqm = holder.get(new Utf8("itwrqm")).toString();
    

    Avro 在内部使用 Utf8 类表示字符串。 另一种解决方法是更改​​架构以支持 Avro 中的 Java 字符串表示:

    {
    "name" : "holder",
    "type" : "type": {"type": "map", "values": {"type" : "string","avro.java.string": "String"},
             "avro.java.string":"String"} 
    }
    

    使用该架构,您可以使用HashMap&lt;String,String&gt; 来获取您的持有人地图。 有关详细说明,请参阅 Apache Avro: map uses CharSequence as key

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 1970-01-01
      相关资源
      最近更新 更多