1

在 Apache Beam 转换中,我可以成功地将我从 Google Cloud Pub/Sub 读取的 pub/sub 值(以 MessagePack 格式)转换为 MessagePackValue对象的映射,如下所示:

    @ProcessElement
    public void processElement(ProcessContext c) 
    {
        Map<Value, Value> map = MessagePack.newDefaultUnpacker(c.element().getPayload()).unpackValue().asMapValue().map();

当我检查时,map我可以看到以下内容:

在此处输入图像描述

如果我然后尝试获取这样的值,它总是返回 null:

map.get("Tz")

我如何获得价值?我需要以不同的方式转换值,还是需要以不同的方式检索它们?

4

2 回答 2

2

映射键是 MessagePackValue对象,所以我需要这样做来引用键,并将值作为字符串返回:

import org.msgpack.value.ValueFactory;

map.get(ValueFactory.newString("Tz")).toString()

另请参阅在消息包中,从 MapValue 获取值时出错。请帮助我(该解决方案在我的情况下不起作用,但有一些建议可用于处理可在 a 中使用的不同类型Map

于 2018-11-07T23:50:16.480 回答
2

地图是地图,所以键是一个值对象,但是当你做 map.get("Tz")

您可以使用 Tz 创建一个 Value 对象并尝试基于该 Value 对象吗?

于 2018-11-07T23:43:46.950 回答