如何从Pig中的关系生成自定义模式?

时间:2011-04-15 19:59:52

标签: hadoop mapreduce apache-pig

我有一个描述各种文章中单词的tf-idf值的模式。 它的描述如下:

tfidf_relation: {word: chararray,id: bytearray,tfidf: double}

以下是此类数据的示例:

(cat,article_one,0.13515503603605478)
(cat,article_two,0.4054651081081644)
(dog,article_one,0.3662040962227032)
(apple,article_three,0.3662040962227032)
(orange,article_three,0.3662040962227032)
(parrot,article_one,0.13515503603605478)
(parrot,article_three,0.13515503603605478)

我希望以表格形式获得输出: cat article_one 0.13515503603605478,article_two 0.4054651081081644 等等。 问题是,如何从中创建包含单词field和id和tfidf字段元组的关系? 像这样:

X = FOREACH tfidf_relation GENERATE word, (id, tfidf);

不起作用。这个的正确语法是什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

    t = LOAD 'input/file' USING PigStorage(',') as (word: chararray,id: bytearray,tfidf: double);
    u = group t by word;
    dump u;

输出

    (cat,{(cat,article_two,0.4054651081081644),(cat,article_one,0.13515503603605478)})
    (dog,{(dog,article_one,0.3662040962227032)})
    (apple,{(apple,article_three,0.3662040962227032)})
    (orange,{(orange,article_three,0.366204096222703)})
    (parrot,{(parrot,article_three,0.13515503603605478),
    (parrot,article_one,0.13515503603605478)})

我希望这就是你要找的东西。

答案 1 :(得分:0)

X = FOREACH tfidf_relation GENERATE word, {(id, tfidf)};

这可能就是你所需要的。