MapReduce を使用して、並列化されたレコード結合システムを構築することを検討しています。言語は問題ではありません。Hadoop などの既存のライブラリを使用することも、必要に応じて独自のライブラリを構築することもできます。それについては心配していません。
しかし、私が常に直面している問題は、レコードを複数の条件で一致させる必要があるということです。例: 個人の名前または電話番号に基づいてレコードを照合する必要がある場合がありますが、必ずしも個人の名前と電話番号ではありません。
たとえば、各レコードに次のキーがあるとします。
- 「ジョン・スミス」および「555-555-5555」
- 「ジェーン・スミス」および「555-555-5555」
- 「ジョン・スミス」および「555-555-1111」
システムに 3 つのレコードすべてを取得し、それらがキーの 1 つで一致することを確認し、それらを結合して、両方の名前 ('John Smith' と 'Jane Smith') と両方の電話番号を持つ単一の結合レコードにします。 (「555-555-5555」および「555-555-1111」)。
これは MapReduce を使用して達成できるものですか? もしそうなら、一致したすべてのレコードをReduce関数に渡すことができるように、Map関数によって生成されたキーをどのように一致させますか.*または、これを行うことができる別の/より良い方法はありますか? 私の唯一の本当の要件は、並列化する必要があることです。
[*] 注意: 私は、Reduce 関数がジョブ全体に対して 1 つの結果を生成するのではなく、Reduce 関数の各呼び出しが 1 つの結合されたレコードを生成するような方法で Reduce 関数を使用できると想定しています。