0

私はhadoopが初めてで、マップ関数の入力がキーが次のようなファイルであるプログラムを使用しています:

ID:      value:
3          sd
37          g
5675       gk
68         oi

私のファイルは約 10 ギガバイトで、これらの ID を変更して降順で再番号付けしたいと考えています。値を変更したくありません。私の出力は次のようになります。

 ID:        value:
 5675         sd
 68           g
 37           gk
 3            oi

ノードのクラスターでこの作業を行いたいですか? どうやってやるの?

グローバル変数が必要だと思いますが、クラスターでこれを行うことはできませんか? 私に何ができる?

4

2 に答える 2

1

1 つの map/reduce を実行して ID を並べ替えると、ID が降順のファイルが作成されます。

次に、マッパーが列挙子 (複数のマップを容易にするために分割サイズによって計算できる) を発行する未ソートのファイルとそのファイルを結合する 2 番目の map/reduce を記述して、最初のファイルを処理するマッパーが発行するようにすることができます。 「1 sd」「2 g」などと、ids ファイルを処理するマッパーは「1 5675」「2 68」を出力します。レデューサーはファイルを結合します

これは、これらの行に沿って何かを行う(テストされていない) pig 0.11スクリプトです。

A = load 'data' AS (id:chararray,value:chararray);
ID_RAW= FOREACH A GENERATE id;
DATA_RAW = FOREACH A GENERATE value;
ID_SORT= RANK ID_RAW BY id DESC DENSE;
DATA_SORT = RANK DATA_RAW DENSE;
ID_DATA = JOIN ID_SORT by $0, DATA_SORT by $0;
RESULT = FOREACH ID_DATA GENERATE ID_SORT::ID,DATA_SORT::value;
STORE RESULT to 'output';
于 2013-05-07T18:20:32.597 に答える
0

これを言う前に、hadoop の使用に関する Arnon の回答が気に入っています。

しかし、これは小さなファイルなので、10G はそれほど大きくなく、一度実行するだけでよいので、個人的には小さなスクリプトを書くだけです。

タブ区切りファイルを想定

sort myfile.txt > myfile.sorted.text
paste myfile.sorted.text myfile.text | cut -f1,4 > newFile.txt

これには長い時間がかかる場合があり、hadoop を使用するよりも確かに時間がかかりますが、シンプルで機能します

于 2013-05-07T21:16:22.243 に答える