该函数应输出一对格式,并带有示例“
要在Pig中获取字符串“ theWord”的长度,您需要为每个单词使用SIZE函数。要将单词的大小与字符串“ Length”连接起来,需要为每个大小使用函数CONCAT。最后,我知道,为了将整数转换为字符串,以便将其与另一个字符串连接在一起,并使用(CHARARRAY)对其进行强制转换。例如,我将使用“(CHARARRAY)SIZE(word)”。
我已经编写了代码,但是当我尝试转储数据时,它并没有达到我的期望。我想我可能需要做一个计数功能,但是我对此有些困惑。
UIntPtr
答案 0 :(得分:1)
我知道了!代码应该是这样的:
p1 = LOAD 'poems/input/Poem1.txt' USING TextLoader AS(line:Chararray);
p2 = LOAD 'poems/input/Poem2.txt' USING TextLoader AS(line:Chararray);
p3 = LOAD 'poems/input/Poem3.txt' USING TextLoader AS(line:Chararray);
p4 = LOAD 'poems/input/Poem4.txt' USING TextLoader AS(line:Chararray);
p5 = LOAD 'poems/input/Poem5.txt' USING TextLoader AS(line:Chararray);
p6 = LOAD 'poems/input/Poem6.txt' USING TextLoader AS(line:Chararray);
p = UNION p1, p2, p3, p4, p5, p6;
words = foreach p generate flatten(TOKENIZE(line , ' ,;:!?\t\n\r\f\\.\\-')) as word;
words_lower = foreach words generate LOWER(word) as word_lower;
words_length = foreach words generate CONCAT('Length ', (CHARARRAY)SIZE(word)) as word_length;
words_unique = group words_length by word_length
words_with_count = foreach words_unique generate COUNT(words_length) as cnt, group;
words_with_count_sorted = ORDER words_with_count BY cnt DESC, group;
store words_with_count_sorted into 'poems/output/wordcount1';
答案 1 :(得分:0)
我认为应该修改代码 word_length。将单词转换为小写而不使用它们是没有意义的。考虑...
words_length = foreach words_lower generate CONCAT('Length ', (CHARARRAY)SIZE(word)) as word_length;
事实上,字长计数可以直接应用于单词而不用降低它们,因此可以删除 words_lower 代码。
关于words_unique,不要忘记';'