2

Customer と Goods の 2 つのデータセットがあります。Customer データセットには、キーとしての顧客 ID と、顧客が購入した商品の ID のリストが値として含まれています。Goods データセットは、good it をキーとして、その価格を value として持っています。外部キー商品の ID に従って、この 2 つのデータセットを結合するにはどうすればよいですか?

customer dataset:
customer id, goods id1,goods id2, ...

goods dataset
goods id1, price1
goods id2, price2

The join result dataset I want:
customer id1,price1,price2,...
customer id2,pric3e,price4,...

私は Hadoop の初心者です。Pig と Hive で実行できることはわかっていますが、Hadoop を使用して Java で実装したいと考えています。誰でも私を助けることができますか?どうもありがとう!

4

3 に答える 3

1

MapReduceドキュメントのData-Intensive Text ProcessingRelational Joinsのセクションを確認してください。

于 2012-07-23T12:21:59.503 に答える
1

ポールの答えに追加できるかもしれません。ここでは、分散キャッシュの概念を使用できます。ファイルの小さい方 (あなたの場合は商品データセットだと思います) を分散キャッシュに読み込みます。(分散キャッシュは、デフォルトで最大 10Gb のデータを保持できます)。次に、法線マップを使用して顧客データセットを読み取り、分散キャッシュから一致するデータを使用して結合を実行できます。

興味深い事実は、データノードに関係なく、分散キャッシュ データのデータにすべてのマッパーがアクセスできることです。

http://bigdatapartnership.com/map-side-and-reduce-side-joins/は、MapReduce アプリケーションでの結合に関する洞察を提供できます。

Hadoop: The Definitive Guide By Tom White では、Map Side Join、Reduce Side Join、および Join with Distributed Cache に関するプログラムの例を示しています。

Chuck Lam によるHadoop In Actionの第 5 章でも、結合について説明しています。

于 2012-07-23T13:25:57.587 に答える
0

「商品」データセットの大きさは? 十分に小さい場合、最も簡単な方法は、(ハッシュマップで) マッパーのメモリにロードし、「Customers」データセットをジョブへの入力にすることです。次に、ジョブを実行し、入力を繰り返しながら「商品」を検索できます。分散キャッシュを使用して、クラスタ内の各ノードに分散された「商品」データを取得できます。

于 2012-07-23T09:54:08.790 に答える