Apache Beam с MessagePack - как мне получить значения из карты <Value, Value>? - PullRequest
0 голосов
/ 08 ноября 2018

Внутри преобразования Apache Beam я могу успешно преобразовать значения pub / sub (в формате MessagePack), которые я читаю из Google Cloud Pub / Sub, в карту MessagePack Value объектов, подобных этому:

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

Когда я проверяю map, я вижу следующее:

enter image description here

Если я затем пытаюсь получить значение, подобное этому, оно всегда возвращает ноль:

map.get("Tz")

Как мне получить значение? Нужно ли преобразовывать значения другим способом или нужен другой способ их получения?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Ключи карты являются объектами MessagePack Value, поэтому мне нужно было сделать это для ссылки на ключ и возврата значений в виде строк:

import org.msgpack.value.ValueFactory;

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

См. Также В пакете сообщений ошибка при получении значения из MapValue .. Пожалуйста, помогите мне (в моем случае решение не сработало, но есть некоторые предложения по работе с различными типами, которые могут быть используется в Map)

0 голосов
/ 08 ноября 2018

Карта - это Карта, поэтому ключ является ценным объектом, но вы используете String и ключ, когда выполняете map.get ("Tz")

Можете ли вы создать объект Value с помощью Tz и попытаться получить его на основе этого объекта Value?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...