私は、Pigジョブの出力で作業できるPythonコードを書くための「正しい」方法を探しています。PigへのバインドSTOREまたはDUMPの出力を
ここは私の状況です。私は大量のデータをクランクして少数の関係を出力するために豚スクリプトを書いた。出力データの量は、コンソールに直接ダンプするのに十分です。例えば:次のステップとして
grunt> DUMP results
(Control, column1, column2, column3, column4, column5, column6)
(Treatment1, column1, column2, column3, column4, column5, column6)
(Treatment2, column1, column2, column3, column4, column5, column6)
(Treatment3, column1, column2, column3, column4, column5, column6)
grunt>
、私は例えば、関係全体の数字で計算処理いくつかの番号をしたいです観察された治療結果の重要性についてp値を計算する。私は本当にこれのためにPythonを使いたいと思う:豚自体は明らかにそのようなタスクのために意図されていない、と私はJavaで既存のコードを書き直すことを好むだろう。ですから、私がしたいのは、何とかしてSTOREやDUMPコマンドの出力にバインドして、それを前進させることです。私の問題は、最善の方法を考え出すことです。ここに私が見る方法があります:
- 計算を実行するUDFを書くためにPythonを使用してください。私がすることができます;実際に私のPigスクリプトはすでにいくつかのPython UDFを呼び出しています。しかし、私の印象は、UDFは一度に1つの関係/入力行で作業することを意図しており、私は目標を達成するために複数の関係からデータを取得する必要があるということです。私はUDF内で何らかの種類の状態ストレージを一緒にハックすることができますが、正しい解決策のようには見えません。
- Pig 0.9.1でJythonを使用して埋め込まれたPythonを使用します。私はこのアプローチに大きな期待を持っていましたが、この機能で見つかった限られたドキュメントから、ジョブフローを制御することを主目的としていました(標準的な例は、インターナルアルゴリズムのコンバージェンスを検出しています)。具体的には、成功したか失敗したかなどのジョブメタデータにバインドする方法についてのドキュメントがありますが、出力にバインドする方法はわかりません。これで間違っていることが証明されるのが大好きです。
- PythonスクリプトがPigを呼び出して、目的の出力場所のローカルまたはHDFSパスを渡して、ジョブが終了するのを待ってから、Pythonを使用してパスから読み込み/解析の関係を読み込みます。本当にハッキリと思える。
明白なオプションがありますか、上記のオプションの理解に大きな違いがありますか?あなたのご意見は大歓迎です!
私は豚でこれを行う方法がわかりませんが、yelpのmrjobは、ハープストリームで#3で求めているものです。おそらく何とかブタを使うことも可能でしょう。 Googleはちょうどこれを求める人々のいくつかの結果を示しています。ドナルド鉱夫の例は私にとってはかなり単純だと思われます。 – BenH