Hadoop Pig脚本帮助标记句子中的单词

Hadoop Pig脚本帮助标记句子中的单词,hadoop,apache-pig,cloudera,Hadoop,Apache Pig,Cloudera,我正在研究以下问题的解决方案: 给定一个用英语编写的任意文本文档,编写一个程序,生成一致性,即所有单词出现的字母列表,用单词频率标记 额外好处:在每个单词上标注每个出现的句子编号 现在,我已经完成了这个练习的第一部分。我被奖金的部分卡住了 有人能帮我吗?我正在Cloudera Live上使用Hadoop Pig。下面是示例输出(包括奖金)的外观 a. a {2:1,1} b. all {1:1} c. alphabetical {1:1} d. an {2:1,1} e. appear

我正在研究以下问题的解决方案:

给定一个用英语编写的任意文本文档,编写一个程序,生成一致性,即所有单词出现的字母列表,用单词频率标记

额外好处:在每个单词上标注每个出现的句子编号

现在,我已经完成了这个练习的第一部分。我被奖金的部分卡住了

有人能帮我吗?我正在Cloudera Live上使用Hadoop Pig。下面是示例输出(包括奖金)的外观

a. a {2:1,1} 
b. all {1:1} 
c. alphabetical  {1:1} 
d. an {2:1,1} 
e. appeared {1:2} 
pig脚本进行单词计数,另一个按字母顺序排列

--Load data
lines = LOAD '/user/cloudera/gettysburg.txt' AS (line:chararray);

-- Create list
words = FOREACH lines GENERATE FLATTEN(TOKENIZE(line)) as word;

-- Count occurances
grouped = GROUP words BY word;

--Generate wordcout
wordcount = FOREACH grouped GENERATE group, COUNT(words);

--Save output
STORE wordcount into '/user/cloudera/output';
单词count字母排序

--Load unsorted data file
unsortedData = LOAD '/user/cloudera/output/UnsortedList.txt' AS (words:chararray, frequency:int);
DUMP unsortedData;

--Put data in alphabetical order
sortedData = ORDER unsortedData BY words ASC, frequency;
DUMP sortedData;

--Save output
STORE sortedData into '/user/cloudera/output2';
谢谢,
Anne

可以使用UDF(Datafu)实现,这将有助于为包中的每个元组生成序列号。你能试试这个吗

   register datafu-1.1.0.jar;
   define Enumerate datafu.pig.bags.Enumerate('1');
    A = LOAD '/home/hduser/a22.dat' as (line:chararray);
    Z = FOREACH A GENERATE FLATTEN(TOKENIZE(line,'.')) as (word:chararray); // generate line_number with rank
    Z1 = RANK Z;
    Z2 = FOREACH Z1 GENERATE rank_Z,FLATTEN(TOKENIZE(word)) as (word:chararray); // line_number,word
    Z3 = RANK Z2; // rank used to maintain the word order
    Z4 = GROUP Z3 by rank_Z; // grouped by line_number to generate word_number for each line
    Z5 = foreach Z4 {
      sorted = order Z3 by rank_Z2; 
      generate group, sorted;
    } //ordered to maintain word order
    Z6 = foreach Z5 generate FLATTEN(Enumerate(sorted)) as (l:int,word_no:int,word:chararray,line_no:int); //generate word_number
    Z7 = GROUP Z6 BY word; 
    Z8 = FOREACH Z7 GENERATE group,Z6.line_no,Z6.word_no,COUNT(Z6); // output in order word,line_number,word_number,count_of_each_word
对于单词nation,以下是输出:

(国家,{(16)、(13)、(25)、(16)},{(2)、(2)、(4)、(1)},4)


按照顺序,{(单词,单词,单词,单词,单词3,单词4},{行数,行数,行数,行数,每个单词的计数)

请提供您发布的预期输出的示例输入。您是否介意解释一下比率({2:1,1})得到了。输入文件是葛底斯堡演说。以下是文本:八十七年前,我们的先辈在这个大陆上建立了一个新的国家,孕育于自由之中,致力于人人生而平等的主张。现在我们正在进行一场伟大的内战,检验这个国家,或者任何一个如此孕育和发展的国家我们是在那场战争的一个伟大战场上相遇的。我们来到这里是为了奉献这一战场的一部分,作为那些为这个国家的生存而献出生命的人的最后安息之地。我们这样做是完全合适和恰当的。举个例子,2:1,比例({2:1,1})是单词Now的位置,在第二句,第一个单词中。在比率中,1是单词Now的计数,它是1。