Запуск скрипта подсчета слов Pig на Amazon EMR с ошибкой

ниже приведен пример моего кода. Я пытаюсь сделать демонстрацию количества слов Ветхого Завета. Когда я пытаюсь запустить этот код через Amazon EMR, этот шаг не выполняется. Я загрузил код в EMR в виде простого текстового файла, и все мои пути верны.

Вот мой код:

a = load 's3://joe-hadoop-first-try/oldtest/oldtest.txt' as (f1:chararray);
b = foreach a generate FLATTEN(TOKENIZE(f1)) as word;
c = group b by word;
d = FOREACH c GENERATE COUNT(b), group;
store d into 's3://joe-hadoop-first-try/wordcountoutput';

Вот вывод ошибки:

3904 [main] ERROR org.apache.pig.PigServer  - exception during parsing: Error during parsing. <file s3://joe-hadoop-first-try/input/wordcountoldtest.txt, line 2, column 52>  mismatched input '$0' expecting RIGHT_PAREN

Начало текста образца выглядит так: Текстовый файл представляет собой ветхий завет в текстовом формате. Вот пример начала: Проект Гутенберг Электронная книга Библии короля Иакова Эта электронная книга предназначена для использования кем угодно и где угодно бесплатно и почти без каких-либо ограничений. Вы можете копировать, отдавать или повторно использовать ее в соответствии с условиями лицензии Project Gutenberg, прилагаемой к этой электронной книге, или в Интернете по адресу www.gutenberg.org Название: Библия короля Иакова Дата выпуска: 2 марта 2011 г. [Электронная книга №10 ] [Эта Библия короля Иакова была первоначально опубликована Project Gutenberg в конце 1989 года]

Кроме того, эта ошибка по-прежнему возникает, когда текстовый файл содержит только:

helloworld

Используется как ввод

Вот попытка решения с использованием схемы:

a = load 's3://joe-hadoop-first-try/oldtest/oldtest.txt' as (f1:chararray);
b = foreach a generate FLATTEN(TOKENIZE(f1)) as word;
c = group b by word;
d = FOREACH c GENERATE COUNT(b), group;
store d into 's3://joe-hadoop-first-try/wordcountoutput';

Этот код работает сейчас! Исправил все ошибки


person Joseph P Nardone    schedule 30.12.2015    source источник
comment
Как выглядит содержимое текстового файла?   -  person OneCricketeer    schedule 31.12.2015
comment
Я добавил информацию к моему основному вопросу   -  person Joseph P Nardone    schedule 31.12.2015
comment
Пожалуйста, отредактируйте свой вопрос, чтобы добавить это, а не комментарии.   -  person OneCricketeer    schedule 31.12.2015
comment
Есть ли в этом где-нибудь новые строки?   -  person OneCricketeer    schedule 31.12.2015
comment
Да, но ошибка все еще возникает, когда я использую текстовый файл только с: helloworld без разрывов строки и без пробелов.   -  person Joseph P Nardone    schedule 31.12.2015
comment
Ваша ошибка говорит, что вам не хватает правых скобок во второй строке, но мне кажется, что это нормально. Можете ли вы попробовать загрузить файл со схемой? load 'path' as (f1:chararray), затем используйте f1 вместо $0   -  person OneCricketeer    schedule 31.12.2015
comment
Это вызвало ту же ошибку, пожалуйста, смотрите исходный пост для моего кода   -  person Joseph P Nardone    schedule 31.12.2015
comment
Нет, не копируйте в точности то, что я напечатал... Когда будете делать a = load 's3://...', дайте там схему. Также как вы ожидаете, что данные в a будут загружены? По умолчанию текст будет разбит на табы.   -  person OneCricketeer    schedule 31.12.2015
comment
Моя ошибка, пришлось читать о схемах, я впервые использую этот язык. Это был пример учебника, но я не могу заставить его работать. Попробуйте предложенное вами решение снова сейчас. Пожалуйста, смотрите исходный пост для моего исправленного кода.   -  person Joseph P Nardone    schedule 31.12.2015
comment
Не волнуйтесь. Теперь вам не нужно разыгрывать f1, поэтому вы можете удалить (chararray)   -  person OneCricketeer    schedule 31.12.2015
comment
Тестирование сейчас, см. основной пост через минуту или две. Изменить: нет, это тоже не сработало, как в оригинале. У меня будут журналы ошибок через несколько минут.   -  person Joseph P Nardone    schedule 31.12.2015
comment
Вы не ответили на предыдущий вопрос. Вы хотите загружать данные по новой строке или табуляции? Я бы также рекомендовал использовать функции свиньи, такие как FLATTEN, FOREACH и GENERATE.   -  person OneCricketeer    schedule 31.12.2015
comment
привет все ошибки исправлены, мой вывод был part-r-10000 и УСПЕХ   -  person Joseph P Nardone    schedule 31.12.2015
comment
Итак, решение заключалось в том, чтобы использовать функции с большой буквы (по крайней мере, FLATTEN)?   -  person OneCricketeer    schedule 31.12.2015
comment
Решение заключалось в том, чтобы изменить выходной файл на ранее определенное место.   -  person Joseph P Nardone    schedule 31.12.2015
comment
Ах. Тогда вы должны были опубликовать это сообщение об ошибке. Ну что ж. Рад, что ты понял это.   -  person OneCricketeer    schedule 31.12.2015
comment
Нет, не волнуйтесь, ваше решение было первым сообщением об ошибке, затем, когда оно перешло к сохранению данных, оно обнаружило другую ошибку. Ваши исправления были необходимы.   -  person Joseph P Nardone    schedule 02.01.2016
comment
Хорошо, если мои предложения действительно помогли, вы можете выразить свою признательность, нажав на галочку рядом с моим ответом ниже.   -  person OneCricketeer    schedule 02.01.2016
comment
Конечно, только начал использовать этот сайт, извините, что не принял раньше.   -  person Joseph P Nardone    schedule 02.01.2016


Ответы (1)


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

  1. Вы можете загрузить данные, используя схему вместо встроенного приведения.
  2. Некоторые функции Pig работают правильно только с заглавной буквы.
  3. Убедитесь, что ваши входы и выходы указаны в правильных местах

Итак, полный код должен выглядеть так

a = LOAD 's3://joe-hadoop-first-try/oldtest/oldtest.txt' AS (f1:chararray);
b = FOREACH a GENERATE FLATTEN(TOKENIZE(f1)) AS word;
c = GROUP b BY word;
d = FOREACH c GENERATE COUNT(b), group;
STORE d INTO 's3://joe-hadoop-first-try/wordcountoutput';

Кроме того, по умолчанию операция LOAD разбивает данные по вкладкам. Если это неправильное поведение, разделитель можно изменить с помощью PigStorage, например, для новых строк.

a = LOAD 's3://joe-hadoop-first-try/oldtest/oldtest.txt' USING PigStorage('\n') AS (f1:chararray);
person OneCricketeer    schedule 30.12.2015