首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在google /数据流中为KV<Boolean、Map<String、Object>>指定编码器

如何在google /数据流中为KV<Boolean、Map<String、Object>>指定编码器
EN

Stack Overflow用户
提问于 2017-06-19 03:36:49
回答 1查看 1.3K关注 0票数 2

我有一个在json文件中描述的表,在此基础上,我希望稍后将集合创建为sideInput。

代码语言:javascript
运行
复制
PCollection<KV<Boolean, Map<String, Object>>> pC = p_jsonstring
    .apply("create ...", MapElements.via( (String input) -> {                                                                               
      try {
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> mytable =
            mapper.readValue(input, new TypeReference<Map<String, Object>>(){});
        Boolean key = (Boolean) mytable.get("mykey");
        return KV.of(key, mytable);
      } catch (IOException e) {
        e.printStackTrace();
        return null;
      }
    }).withOutputType(new TypeDescriptor<KV<Boolean, Map<String, Object>>>() {}));

在运行它时,我有以下错误消息:

严重:无法返回创建KV./Map.out PCollection的默认编码器。纠正以下原因之一:没有手动指定Coder;您可以使用.setCoder()这样做。从CoderRegistry推断编码器失败:无法为org.apache.beam.sdk.values.KV>提供默认编码器。纠正以下原因之一:使用已注册的CoderFactory生成编码器失败:无法为参数化类型org.apache.beam.sdk.values.KV>提供编码器:无法为java.util.Map提供默认编码器。纠正以下原因之一:使用已注册的CoderFactory生成编码器失败:无法为参数化类型java.util.Map提供编码器:无法为java.lang.Object提供默认编码器。纠正以下原因之一:使用已注册的CoderFactory构建编码器失败:无法根据java.lang.Object类的值提供编码器:未为该类注册CoderFactory。从@DefaultCoder注释构建Coder失败:类java.lang.Object没有@DefaultCoder注释。

我认为这个问题主要与Map<String, Object>中的json有关,但在我的示例中,映射值仅在运行时从文件中读取json字符串时才确定。对象类型可以是字符串、数字或布尔值。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 15:39:16

我认为这个固定的TypeDescriptors.kvs应该作为输出类型在这里工作,并且您可以考虑将输入字符串作为一个字符串保存在Map值中,并在实际要处理对象时反序列化。如果只想在这里反序列化,请考虑为反序列化对象创建一个模式,并使用Row作为您的值类。你可以从该架构生成一个编码器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44621913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档