2011-07-08 10 views
4

この質問に文句を言わないと謝罪します。私は大規模な機械学習プロジェクトに着手しています。私はJavaでのプログラミングが嫌いです。私はPythonでプログラムを書くのが大好きです。私は豚について良いことを聞いた。私は、誰かが私に、PigとPythonを組み合わせて、数学的に関連する作業をどのように使用できるかを明らかにできるかどうか疑問に思っていました。また、私が「ストリーミング・パイソン・コード」と書いていたら、Jythonは写真に入りますか?それが絵になるともっと効率的ですか?豚とPythonを使用する

おかげ

P.S:いくつかの理由で、私はあるようMahoutののコードを使用することを好むません。私はそれらのデータ構造のいくつかを使いたいかもしれません:それが可能であるかどうかを知ることは有用でしょう。

答えて

2

streaming in pigを使用しているときは、使用する言語に関係なく、シェルでコマンドを実行するだけです(bashなど)。 grepやCプログラムのように、Pythonを使うことができます。

Pig UDFs in Python nativelyを定義できるようになりました。これらのUDFは、Jythonが実行されているときに呼び出されます。

+0

は、いずれかの方法のいずれかの長所と短所がありますか? (私と一緒に住んでいなければならないJythonとcPythonの明白な違いは別として) – dvk

+0

どちらかを使用して大幅に減速するとは思わないでしょう。 –

+0

速度とは別に、2つのアプローチの間に設計上の制限がありますか? – dvk

0

Programming Pig本では、UDFを使用して説明しています。この本は一般的に不可欠です。最近のプロジェクトでは、Python UDFを使用していましたが、Floats vs. Doublesのミスマッチで問題が発生することがあったので、注意してください。私の印象は、Python UDFのサポートはJava UDFのサポートほど強固ではないかもしれないが、全体的にはうまくいきます。

+0

私はUDFに関する本のセクションを簡単に読んでいます:何かについてはっきりしていません:Python/<好きな言語のストリーミングを挿入>して、コードの一部として必要なライブラリを埋め込むことができるのはなぜですか?この質問に本当に明白な疑問がある場合にはお詫び申し上げますが、まだストリーミングを見ていない。 – dvk

4

HadoopでPythonを使用する別のオプションはPyCascadingです。 Python/JythonでUDFのみを書くか、ストリーミングを使うのではなく、データ処理パイプラインが定義されているのと同じスクリプトでPython関数を "UDF"としてPythonで一緒に使うことができます。 JythonはPythonインタプリタとして使用され、ストリーム操作用のMapReduceフレームワークはCascadingです。ジョイントやグループ化などはPigと同様に動作しますので、既にPigを知っていれば驚くことはありません。

例を数える言葉は次のようになります。

@map(produces=['word']) 
def split_words(tuple): 
    # This is called for each line of text 
    for word in tuple.get(1).split(): 
     yield [word] 

def main(): 
    flow = Flow() 
    input = flow.source(Hfs(TextLine(), 'input.txt')) 
    output = flow.tsv_sink('output') 

    # This is the processing pipeline 
    input | split_words | GroupBy('word') | Count() | output 

    flow.run() 
関連する問題