2014-10-07 3 views
1

У кого-нибудь есть проблемы с неправильной работой фильтров свиньи. И вообще действует глупо.Свинцовый фильтр не работает

В качестве примера у меня есть несколько журналов, которые выглядят так.

a1 

(2013-12-25 02:55:08,000085594,15468,80365991,1387940111723) 
(2013-12-25 02:55:08,000085594,63943,80365991,1387940111723) 
(2013-12-25 02:55:08,000085594,64014,80365991,1387940111723) 

decribe a1 

a1: {time:chararray, id:chararray, buckets::bucket: int, chararray, chararray) 

Если я попытаюсь отфильтровать по 2 доллара. Я получаю сообщение об ошибке.

a2 = filter a2 by ($2 == 64034); 

Я получаю следующее сообщение об ошибке. ОШИБКА 1066: невозможно открыть итератор для псевдонима a2.

Я немного испортил это, и не понимаю. Итак, я ошибаюсь в UDF Python, который возвращает «Да» или «Нет», если число соответствует.

@outputSchema('y:chararray') 
def bucket(bucket): 
    if bucket == '64034': 
     return "Yes" 
    else: 
     return "No" 

a3 = foreach a1 generate time, myfuncs.bucket($2), $3, $4; 

describe a3 
a3: {time:chararray, id:chararray, y:chararray, chararray, cararray} 

Нет, когда я фильтрую на этом, это работает.

a4 = filter a3 by ($2 == 'Yes'); 

Это дает желаемый результат. Однако мне нужно запустить еще пару преобразований данных с другими UDF. Эти UDF ничего не делают для столбца $ 2. Они просто смотрят на столбец $ 1 и $ 3. Оба UDF работают, когда я использую их перед фильтром. Тем не менее, я получаю ошибку «Не удалось открыть псевдоним», если я пытаюсь применить UDF после фильтра. Кроме того, если я выполняю дополнительные UDF перед фильтром, а затем применяю фильтр - фильтр перестает работать, и я получаю ошибку «невозможно открыть псевдоним». Опять же, они не меняют схему в 2 доллара.

Итак, что можно здесь сделать? Во-первых, почему фильтр не работает. Во-вторых, почему некоторые UDF работают, а затем не работают с кажущейся логикой. Любое направление поиска неисправностей было бы полезно.

+0

Для людей, которые нашли этот пост при поиске [ОШИБКА 1066: Невозможно открыть итератор псевдоним] (http://stackoverflow.com/questions/34495085/error -1066-неспособное к открытому-итератору-для-alias-in-pig-generic-solution) здесь [общее решение] (http://stackoverflow.com/a/34495086/983722). –

ответ

1

Похоже, a2 еще не определен. Скорее, код должен идти следующим образом:

a2 = filter a1 by ($2 == 64034); 
Смежные вопросы