0

Hadoop mapreduce プログラムで画像を処理するサイド プロジェクトに取り組んでいます (最終的に Amazon のエラスティック mapreduce に展開するため)。プロセスへの入力は、すべてのファイルのリストであり、それぞれに少し追加のデータが添付されています (左下隅の緯度/経度の位置 - これらは航空写真です)。

Python Image Library を利用できるように、実際の処理は Python コードで行う必要があります。私が見つけることができるすべての Python ストリーミングの例では、stdin を使用してテキスト入力を処理しています。stdin を介して画像データを Python に送信できますか? もしそうなら、どのように?

ファイルのリストを取得し、名前、追加データ、およびバイナリ コンテンツをシーケンス ファイルに保存する Mapper クラスを Java で作成しました。シーケンス ファイルを取り込んで Python にパイプするカスタム Java マッパーを作成する必要があるのではないかと考えていました。それは正しいアプローチですか?もしそうなら、画像をパイプアウトするJavaとそれらを読み込むPythonはどのように見えるべきですか?

明らかでない場合は、私はJavaまたはPythonにあまり精通していないため、両方の言語の紹介として、これを噛むことができる以上に噛んでいる可能性もあります...

4

1 に答える 1

0

私が見ることができるいくつかの可能なアプローチがあります:

  1. 余分なデータとファイルの内容の両方を Python プログラムへの入力として使用します。ここで難しいのはエンコーディングです。率直に言って、生のバイナリ コンテンツでストリーミングがどのように機能するかはわかりません。基本的な答えは「うまくいかない」と思います。主な問題は、プロセス間の stdin/stdout 通信が非常にテキストベースであり、タブや改行などで入力を区切ることに依存していることです。画像データのエンコーディングについて心配する必要があり、おそらく何らかの前処理ステップ、または画像をテキストとして表現できるようにするカスタム InputFormat が必要です。
  2. Python プログラムへの入力として、余分なデータとファイルの場所のみを使用してください。その後、プログラムはファイルから実際の画像データを個別に読み取ることができます。ここでの問題は、ファイルが python スクリプトで使用できることを確認することです。これは分散環境であるため、ファイルは HDFS または同様の場所にある必要があります。Python で HDFS からファイルを読み取るための適切なライブラリがあるかどうかはわかりません。
  3. Java と Python の対話を自分で行います。Runtimeクラスを使用して Python プロセス自体を開始する Java マッパーを作成します。このようにして、2 つの世界がどのように通信するかを正確に完全に制御できますが、明らかにコードが多くなり、少し複雑になります。
于 2013-10-07T20:51:24.623 に答える