MapReduce でプログラムを使用しています。2 つのファイルがあり、file2 に存在する file1 からいくつかの情報を削除したいと考えています。すべての行には、キーとして ID があり、値として (コンマで区切られた) いくつかの数字があります。
file1:
1 1,2,10
2 2,7,8,5
3 3,9,12
と
file2:
1 1
2 2,5
3 3,9
次のような出力が必要です。
output:
1 2,10
2 7,8
3 12
file2 に同じキーを持つ file1 の値を削除したいと考えています。これを行う 1 つの方法は、2 つのファイルを入力ファイルとして使用し、map ステップで次を生成することです(ID, line)
。次に、reduce ステップで値をフィルタリングします。しかし、私のファイルは非常に大きいため、この方法では実行できません。
または、file1 が入力ファイルで、マップ内で file2 を開いてその行をシークし、値を比較すると効率的でしょうか? しかし、100 万個のキーがあり、キーごとに file1 を開く必要があるため、I/O が過剰になると思います。
私に何ができる?