Обработка нулевого типа данных - PullRequest
0 голосов
/ 06 декабря 2018

Я использую функцию Over из Piggybank, чтобы получить отставание строки

res= foreach (group table by fieldA) {
Aord = order table by fieldB;
generate flatten(Stitch(Aord, Over(Aord.fieldB, 'lag'))) as (fieldA,fieldB,lag_fieldB) ;}

Это работает правильно, и когда я делаю дамп, я получаю ожидаемый результат,Проблема в том, что когда я хочу использовать lag_fieldB для любого сравнения или преобразования, у меня возникают проблемы с типом данных.Если я делаю описание, оно возвращает fieldA: long,fieldB: chararray,lag_fieldB: NULL

Я новичок в PIG, но я уже пробовал приводить к chararray и использовать ToString (), и я продолжаю получать ошибки, подобные этим:

ERROR 1052: Невозможно преобразовать bytearray в chararray

ОШИБКА 1051: невозможно преобразовать bytearray

Спасибо за помощь

1 Ответ

0 голосов
/ 06 декабря 2018

Хорошо, посмотрев код функции Over, я обнаружил, что вы можете создать экземпляр класса Over, чтобы установить тип возвращаемого значения.Что сработало для меня:

DEFINE ChOver org.apache.pig.piggybank.evaluation.Over('chararray');
res= foreach (group table by fieldA) {
Aord = order table by fieldB;
generate flatten(Stitch(Aord, ChOver(Aord.fieldB, 'lag'))) as (fieldA,fieldB,lag_fieldB) ;}

Теперь описание говорит мне

fieldA: long,fieldB: chararray,lag_fieldB: chararray

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

...