私はMapReduceを初めて使用しますが、次のタスクに最適なMapReduceアプローチについてご意見をお聞かせください。
次の形式の大きなドキュメントが1つあります
1 2 3
2
2 3 4 5
各行には番号のリストがあります。可能な(ペアの)数字の組み合わせを任意の行にリストしたいと思います。そして、与えられた各ペアを含む行数が必要です。
結果は次のようになります
element1 element2 occurrences
1 1 1
1 2 1
1 3 1
2 2 3
2 3 2
3 3 2
3 4 1
3 5 1
ドキュメントには約200万行あり、約150万の異なる番号があります。そして、数えられる数の約2.5Gの異なるペアがあります。
まっすぐ進む擬似コードは次のようなものです。ドキュメントの各行のマップを呼び出す
Map(int lineId, list<int> elements)
{
for each pair of integers in elements
emit(pair, 1)
}
Reduce((int, int) pair, list<int> counts)
{
return sum(counts)
}
ただし、このアプローチには2Mマッパーと2.5Gレデューサーが必要です。これはもっともらしい方法ですか?AzureでHadoopを試すことを計画しています。