Как читать данные из пакета данных в сценарии PIG - PullRequest
2 голосов
/ 09 февраля 2011

У меня есть пакет данных в следующем формате {([ChannelName#{ (bigXML,[])} ])}

  • Пакет данных состоит только из одного элемента, который является кортежем.
  • Tuple состоит только из элемента Map.
  • Карта имеет тип, который представляет собой карту между названиями каналов и значениями.
  • Здесь значение имеет тип DataBag, которыйсостоит только из одного кортежа.
  • Кортеж состоит из двух элементов: один представляет собой charrarray (очень большая строка), а другой - карту.

У меня есть UDF, который генерирует вышеуказанную сумку.* Теперь мне нужно вызвать другой UDF, передав единственный кортеж в DataBag против данного канала с карты.

Предполагая, что не было пакета данных и кортежа как ([ChannelName#{ (bigXML,[])} ]) Я могу получить доступ к данным с помощью $0.$0#'StdOutChannel' Теперь с кортежем в сумке {([ChannelName#{ (bigXML,[])} ])} Если я сделаю $0.$0.$0#'StdOutChannel' (Prepend $ 0), я получу следующую ошибку ERROR 1052: Cannot cast bag with schema bag({bytearray}) to map

Как я могу получить доступ к данным в сумке данных?

1 Ответ

2 голосов
/ 10 февраля 2011

Попробуйте немного разобрать эту проблему.

Допустим, вы получили свою внутреннюю сумку:

MYBAG = $0.$0#'StdOutChannel';

Во-первых, вы можете ILLUSTRATE или DUMP это?

Что вы можете сделать с этой сумкой? Обычно FOREACH над кортежами внутри.

A = FOREACH MYBAG {
    GENERATE $0 AS MyCharArray, $1 AS MyMap
};

ILLUSTRATE A; -- or if this doesn't work
DUMP A;

Можете ли вы попробовать это в интерактивном режиме и, возможно, отредактировать свой вопрос немного подробнее с некоторыми деталями в результате того, что вы попробовали это.

Некоторые подсказки по редактированию StackOverflow:

  • ставит галочки вокруг вашего кода (`ILLUSTRATE`)
  • отступ кода блоков по 4 пробела в каждой строке
...