运行 Amazon EMR 上的 Pig 字数统计脚本出错

Running Pig Word Count Script on Amazon EMR Getting Error

以下是我的代码示例。我正在尝试制作旧约字数统计的演示。当我尝试通过亚马逊 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 '[=12=]' expecting RIGHT_PAREN

示例文本的开头如下所示: 文本文件是纯文本格式的旧约。以下是开头的示例: The Project Gutenberg 电子书 詹姆士国王圣经 这本电子书供任何人在任何地方免费使用,几乎没有任何限制。您可以复制、赠送或 re-use 根据本电子书附带的 Project Gutenberg 许可条款或在线 www.gutenberg.org 标题:The King James Bible 发行日期:2011 年 3 月 2 日 [电子书#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';

此代码现在可以使用了!更正了所有错误

根据评论解决问题。

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