Функция должна выводить пару в формате и с примерами <”Length 8”, 1> или <”Length 7”, 1> или аналогичными, такими как <"8", 1>.
Чтобы получить длину строки «theWord» в Pig, вам нужно использовать функцию SIZE для каждого слова. Чтобы объединить размер слова со строкой «Длина», вам необходимо использовать функцию CONCAT для каждого размера. И, наконец, я знаю, что для того, чтобы преобразовать целое число в строку, чтобы объединить его с другой строкой, приведите его к (CHARARRAY). Например, я бы использовал "(CHARARRAY) SIZE (word)".
У меня написан код, но когда я пытаюсь сбросить данные, он не выполняет то, что я ожидаю. Я думаю, что мне может понадобиться сделать функцию подсчета, но я немного озадачен этим.
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_unique = group words_lower by word_lower;
words_with_size = foreach words_unique generate SIZE(words_lower) as size, group;
words_with_size_concat = CONCAT words_with_count BY (CHARARRAY)size(words_lower) DESC, group;