2011-04-15 6 views
1

私はさまざまな記事の単語のtf-idf値を記述するスキーマを持っています。 その説明は次のようになります。ここではPigのリレーションからカスタムスキーマを生成する方法は?

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) 

私は形式で出力を取得したい: 猫article_one 0.13515503603605478、その上0.4054651081081644 とarticle_two。 質問は、単語フィールドとidとtfidfフィールドのタプルを含むこれとの関係をどうやって作るのですか? このような形式:

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

は機能しません。これの正しい構文は何ですか?

答えて

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

これはおそらく必要なものです。

+0

Wojtek、あなたのソリューションのさまざまな形を試しました。解析エラーが記号 "{"に現れるたびに試しました。 – user710450

+0

さて、Javaルーチンの埋め込みを使用してこれを実現したと思います。しかし、正しいPig構文(および可能性自体)は依然として重要です。 – user710450

+0

X(id、tfidf)はどうですか?単語をグループ化してグループ化することができます(覚えていればそのようなものです)が、素早くUDFを書くだけで簡単にできます。 – wlk

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)}) 

になります。