2016-09-06 1 views
1

Я новичок в свинье и пытаюсь учиться самостоятельно.PIG: Невозможно открыть итератор для псевдонима AliasName.Scalar имеет более одной строки на выходе

Я написал сценарий, чтобы получить эпоху со словом, которое читается из файла words.txt.

Вот сценарий.

words = LOAD 'words.txt' AS word:chararray; 
B = FOREACH A GENERATE CONCAT(CONCAT(A.word,'_'),(chararray)ToUnixTime(CurrentTime()); 
dump B; 

Но проблема в том, что если файл words.txt имеет только одно слово, он дает правильный вывод.

Если иметь несколько слов, как

word1 
word2 
word3 
word4 

, то он дает следующее сообщение об ошибке

ОШИБКА 1066: Невозможно открыть итератор для псевдонима В

java.lang . Исключение: org.apache.pig.backend.executionengine.ExecException: ОШИБКА 0: Scalar имеет более одной строки на выходе. 1st: (word1), 2nd: (word2) (общая причина: «JOIN», затем «FOREACH ... GENERATE foo.bar» должен быть «foo :: bar») по адресу org.apache.hadoop.mapred. LocalJobRunner $ Job.runTasks (LocalJobRunner.java:462) at org.apache.hadoop.mapred.LocalJobRunner $ Job.run (LocalJobRunner.java:522) Вызвано: org.apache.pig.backend.executionengine.ExecException : ОШИБКА 0: Скаляр имеет более одной строки на выходе. 1st: (word1), 2nd : (word2) (общая причина: «JOIN», затем «FOREACH ... GENERATE foo.bar» должен быть «foo :: bar») в org.apache.pig.impl. builtin.ReadScalars.exec (ReadScalars.java:122) при о

Пожалуйста, предложите мне решить эту проблему.

спасибо.

+0

получил it.in сценарий просто удален А. он работал –

ответ

1

решить самостоятельно. просто удалил A. из внутреннего CONCAT. Это сработало для меня.

сценарий:

words = LOAD 'words.txt' AS word:chararray; 
B = FOREACH A GENERATE CONCAT(CONCAT(word,'_'),(chararray)ToUnixTime(CurrentTime()); 
dump B; 
Смежные вопросы