Стартиране на Pig Word Count Script на Amazon EMR Getting Error

следното е извадка от моя код. Опитвам се да направя демонстрация на брой думи от Стария завет. Когато се опитам да стартирам този код през 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

Началото на примерния текст изглежда така: Текстовият файл е старият завет в обикновен текстов формат. Ето извадка от началото: Електронната книга на проекта Гутенберг на Библията на крал Джеймс Тази електронна книга е за използване от всеки навсякъде безплатно и без почти никакви ограничения. Можете да го копирате, подарявате или използвате повторно съгласно условията на лиценза на проекта Gutenberg, включен в тази електронна книга или онлайн на www.gutenberg.org Заглавие: Библията на крал Джеймс Дата на издаване: 2 март 2011 г. [EBook #10 ] [Тази Библия на крал Джеймс е публикувана първоначално от проект Гутенберг в края на 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