2

結合フィールドをレデューサー キーとして送信するだけで、単一のキーでデータセットを簡単に結合できます。しかし、少なくとも 1 つが同じでなければならないいくつかのキーでレコードを結合することは、私にとってそれほど簡単ではありません。

例 ログがあり、それらをユーザー パラメータでグループ化し、(ipAddress、sessionId、visitorCockies) で結合したい

したがって、log1.ip == log2.ip OR log1.session = log2.session OR log1.cockie = log2.coockie の場合、log1 は log2 とグループ化する必要があります。おそらく、複合キーまたはminHashのような確率的アプローチを作成することは可能です...

出来ますか?

4

5 に答える 5

0

「複数のキーによるレコードの結合」について詳しく説明できますか?

特定のキーを結合できるワークフローのポイントがわかっている場合、N 個のキーの複雑なデータ構造を操作して 1 つのステップで解決しようとするのではなく、複数の結合を持つフローを定義するのがおそらく最善の方法です。

カスケードでさまざまな種類の結合を処理する方法を示すサンプル アプリを次に示します: https://github.com/Cascading/CoPA

于 2012-11-18T17:35:50.377 に答える
0

カスケードの場合、OR 内の条件の出力が true かどうかをチェックする Filter を作成することになりました。カスケード フィルターは、オプションで使用できる True/False 値を出力します。

于 2013-04-16T19:41:05.443 に答える
0

上記の Joe の説明に従って個別の結合を作成したら、重複を取り除く必要があります。データ内の 2 つのタプルは、「OR 結合」で使用するすべてのフィールドで等しい場合、重複しています。したがって、後で関連するすべてのフィールドを表すキーで自然結合を行うと、すべての重複がグループ化されます。したがって、それぞれのタプルの 1 回のオカレンスでそれらを置き換えることができます。

例を見てみましょう: フィールド (A、B、C、D) を持つタプルがあり、関心のあるフィールドが A、B、および C であると仮定します。まず、A、B に対して等結合を行います。 、および C を個別に。それぞれについて、最初のタプル ストリームをそれ自体に結合します。最初のストリームを (A0, B0, C0, D0) で示し、2 番目のストリームを (A1, B1, C1, D1) で示します。結果はタプル (A0、B0、C0、D0、A1、B1、C1、D1) になります。これらのタプルごとに、タプル (A0A1B0B1C0C1、A0、B0、C0、D0、A1、B1、C1、D1) を作成すると、すべての重複が後続のレデューサーでグループ化されます。グループごとに、含まれているタプルを 1 つだけ返します。

于 2012-09-26T04:21:54.617 に答える
0

問題は、MapReduce 結合は通常、一部のフィールドで一致するレコードに同じリデュース キーを与えることで実装され、同じレデューサーに送信されるようになることです。したがって、これを回避することは少しハックになるでしょうが、それは可能です...

私がお勧めするのは、入力レコードごとに 3 つのコピーを生成し、それぞれに新しい「キー」フィールドがあり、元のフィールドがプレフィックスとして付けられていることです。たとえば、次の入力があったとします。

(ip=1.2.3.4, session=ABC, cookie=123)
(ip=3.4.5.6, session=DEF, cookie=456)

次に、生成します

(ip=1.2.3.4, session=ABC, cookie=123, key=ip_1.2.3.4)
(ip=1.2.3.4, session=ABC, cookie=123, key=session_ABC)
(ip=1.2.3.4, session=ABC, cookie=123, key=cookie_123)
(ip=3.4.5.6, session=DEF, cookie=456, key=ip_3.4.5.6)
(ip=3.4.5.6, session=DEF, cookie=456, key=session_DEF)
(ip=3.4.5.6, session=DEF, cookie=456, key=cookie_456)

そして、この新しいフィールドで簡単にグループ化できます。

私はスケーディング/カスケーディングにあまり詳しくありませんが (それについてもっと学びたいと思っていましたが)、これは Hadoop で一般的に行われている結合方法に確実に準拠しています。

于 2012-09-24T22:53:01.797 に答える