在amazon emr上运行pig单词计数脚本获取错误

5f0d552i  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(249)

下面是我的代码示例。我正试着做一个旧约圣经字数的演示。当我试图通过amazons 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

示例文本的开头是这样的:文本文件是纯文本格式的旧约。这是一个开始的例子:古腾堡项目的詹姆斯国王圣经电子书这本电子书是为任何人免费使用,几乎没有任何限制。你可以复制它,赠送或重复使用它根据古腾堡项目许可证的条款包括在本电子书或在线www.gutenberg.org 标题:国王詹姆斯圣经发行日期:2011年3月2日[电子书#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';

这个代码正在运行!已更正所有错误

zaqlnxep

zaqlnxep1#

从评论中吸取教训来解决问题。
您可以使用模式而不是内联强制转换来加载数据。
一些清管器功能只有在大写时才能正常工作。
确保您的输入和输出指向正确的位置
所以,完整的代码应该是这样的

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';

另外,默认情况下,加载操作将按选项卡拆分数据。如果这不是正确的行为,那么可以使用pigstorage更改分隔符,就像对换行一样

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

相关问题