0

ラップトップの単一ノード クラスタで Hadoop を使い始めたばかりで、Java よりもよく知っている Python で実行しようとしました。どうやらストリーミングは、他のパッケージをインストールせずにこれを行う最も簡単な方法です。

私の質問は、ストリーミングで少しデータ分析を行うとき、次のことをしなければならなかったということです。

  1. データ (行列、配列 ...) を、ストリーミング用のデフォルトの入力ファイル形式に適合するテキスト ファイルに変換します。
  2. mapper.py でデータを再構築して、明示的に (キー、値) ペアを作成し、それらを出力します。
  3. 結果をテキスト形式で読み取り、行列データに変換して、他の処理を実行できるようにします。

テキストファイルを入力としてワードカウントを行うと、すべてがうまく見えます。しかし、ストリーミング内でデータ構造をどのように処理しますか? 私のやり方は受け入れられないようです...

4

2 に答える 2

1

Python と Hadoop の場合は、 http://pythonhosted.org/mrjob/MRjobのパッケージを探してください。

独自のエンコード/デコード プロトコル、ストリーミング マトリックス行を rownum-values ペアとして記述したり、すべての要素を row:col-value ペアなどとして記述したりできます。

いずれにせよ、hadoop は行列演算で使用するのに最適なフレームワークではありません。これは、相互に関連しない大量のデータ用に設計されているためです。つまり、キーと値の処理が他の値に依存しない場合、または非常に限られた方法で依存する場合です。

于 2013-10-22T07:35:38.213 に答える
0

json をテキスト形式として使用すると、エンコードとデコードが非常に便利になります。

たとえば、hdfs の 4*4 単位行列は次のように格納できます。

{"row":3, "values":[0,0,1,0]}
{"row":2, "values":[0,1,0,0]}
{"row":4, "values":[0,0,0,1]}
{"row":1, "values":[1,0,0,0]}

マッパーjson.loads()では、json ライブラリを使用して各行を解析し、操作が非常に簡単な Python 辞書にします。次に、キーに続いてさらに json を返します ( json.dumps()python オブジェクトを json としてエンコードするために使用します)。

1    {"values":[1,0,0,0]}
2    {"values":[0,1,0,0]}
3    {"values":[0,0,1,0]}
4    {"values":[0,0,0,1]}

レデューサーjson.loads()では、値を使用して Python 辞書を作成します。これらは、たとえば、numpy 配列に簡単に変換できます。

于 2013-10-22T08:17:57.683 に答える