我对pig很不熟悉,我想尝试对不带标点符号的单词进行排序。我可以很好地转储d,当我尝试转储e并得到这个错误时,问题就来了。
[main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias E
A = load './SherlockHolmes.txt' using PigStorage(' ');
B = foreach A generate FLATTEN(REGEX_EXTRACT_ALL(LOWER((chararray)$0),'([A-Za-z]+)')) as word;
C = group B by word;
D = foreach C generate COUNT(B) AS counts, group AS word;
E = ORDER D BY counts DESC;
DUMP E;
我做错什么了?
1条答案
按热度按时间eyh26e7m1#
对于这个答案,我将使用这个作为示例输入:
当我第一次写剧本的时候,我发现
DESCRIBE
以及DUMP
每一步都有一些样本数据,这样我就能确切地知道发生了什么。用你的剧本来表现:所以
A
是一个值数目未知的“元组”(实际上是一个模式)。一般来说,如果您不知道may值在元组中的形式,那么应该改用bag。当你使用
$0
您指的不是模式中的所有单词,而是第一个单词。所以你只是在申请LOWER
以及REGEX_EXTRACT_ALL
第一个字。另外,请注意FLATTEN
运算符正在元组上执行,而不会生成所需的输出。你想吗FLATTEN
一个袋子。C
,D
,和E
所有这些都应该如您所期望的那样工作,所以这一切都是关于对数据进行处理,使其成为他们可以使用的格式。知道了这一点,你可以这样做:
所以现在
B2
是:当它进入
C
,D
,和E
,将提供所需的输出。如果你需要我澄清什么,请告诉我。