# Apache Spark BatchのtMatchGroupプロパティ

これらのプロパティは、Spark Batchジョブのフレームワークで実行されているtMatchGroupを設定するために使われます。

Spark BatchのtMatchGroupコンポーネントは、データクオリティファミリーに属しています。

このコンポーネントは、8.0 R2024-08 Talend Studioマンスリーリリースから利用可能です。

情報メモ重要: シンプルVSRアルゴリズムを使用する場合、結果は入力データとSpark APIのシャッフリングに依存します。そのため、ジョブの実行ごとに結果が異なります。結果の安定性を最適化する場合は、tMatchGroupコンポーネントの直前に[tPartitionコンポーネント](https://help.qlik.com/talend/ja-JP/components/8.0/processing/tpartition)を使用することを強くお勧めします。

結果の安定性の最適化には、次のような方法もあります:

* 同じブロッキングキー (tMatchGroup)とパーティションキー (tPartition)を設定します。

* ソートキー (tPartition)として一意値を選択します。たとえば、IDです。

このフレームワークのコンポーネントは、すべてのビッグデータ対応のTalendプラットフォーム製品およびTalend Data Fabricで利用できます。

## 基本設定

| プロパティ | 説明 |
| --- | --- |
| [Schema] (スキーマ)と[Edit schema] (スキーマを編集) | <ul> <li> <p>スキーマとは行の説明のことです。処理して次のコンポーネントに渡すフィールド(カラム)数を定義します。Sparkジョブを作成する場合、フィールドの命名時は予約語の<kbd>line</kbd>を避けます。</p> <p>ジョブで接続している先行コンポーネントからスキーマを取得するためには、<span>[Sync columns] (カラムを同期)</span>をクリックします。</p> <p>このコンポーネントの出力スキーマには、以下の読み取り専用フィールドが含まれています:</p> <p>このコンポーネントの出力スキーマには、以下の読み取り専用フィールドが含まれています:</p> <div> <ul> <li> <p> <span><samp>GID</samp>: <em>String</em>データ型のグループ識別コードを提供します。</span> </p> </li> <li> <p> <span><samp>GRP_SIZE</samp>: グループのレコード数をカウントします。マスターレコードでのみ計算されます。</span> </p> </li> <li> <p> <span><samp>MASTER</samp>: マッチング比較で使用されるレコードがマスターレコードかどうかを<span>true</span>または<span>false</span>で識別します。マスターレコードは各グループに1つのみです。入力レコードはそれぞれマスターレコードと比較され、マッチングした入力レコードはグループに含められます。</span> </p> </li> <li> <p> <span><samp>SCORE</samp>: 使用される一致アルゴリズムに基づいて、入力レコードとマスターレコード間の距離を測定します。<span>tMatchGroup</span>コンポーネントで複数の出力フローを使用している場合、このカラムのスコアにより、レコードが送られる出力グループが決定されます。</span> </p> </li> <li> <p> <span><samp>GRP_QUALITY</samp>は、最小マッチ値の指定により、グループの類似性のクオリティを保ちます。クオリティスコアが存在するのはマスターレコードだけです。</span> </p> </li> </ul> </div> </li> <li> <p> <span>[Built-in] (組み込み)</span>: そのコンポーネントに対してのみスキーマを作成し、ローカルに保管します。</p> </li> <li> <p> <span>[Repository] (リポジトリー)</span>: スキーマは作成済みで、リポジトリーに保管されています。さまざまなプロジェクトやジョブデザインで再利用できます。</p> </li> </ul> |
| [Matching Algorithm] (マッチングアルゴリズム) | デフォルトで[Simple VSR] (シンプルVSR)が設定されます。<br><br>情報メモ制約事項: T-SwooshアルゴリズムはApache Spark Batchコンポーネントでは使用できません。このアルゴリズムは[標準コンポーネント](https://help.qlik.com/talend/ja-JP/data-matching/8.0/tmatchgroup-standard-properties "これらのプロパティは、標準のジョブのフレームワークで実行されているtMatchGroupを設定するために使われます。")で使用できます。 |
| ![\[Import match rule\] (マッチングルールをインポート)](https://help.qlik.com/talend/ja-JP/data-matching/Resources/images/import_action.svg) | インポートアイコンをクリックして、Talend Studioリポジトリーからマッチングルールをインポートします。<br><br>ルールをインポートする方法については、[リポジトリーからマッチングルールをインポート](https://help.qlik.com/talend/en-US/data-matching/8.0/importing-match-rules-from-studio-repository)をご覧ください。 |
| [Key Definition] (キー定義) - [Input Key Attribute] (入力キー属性)カラム | マッチングアルゴリズムを適用する入力フローからカラムを選択します。<br><br>情報メモ注: 日付カラムにアルゴリズムやマッチングアルゴリズムを適用すると、日付形式で比較する内容を決定できます。<br><br>たとえば、日付の年のみを比較する場合は、コンポーネントスキーマで日付カラムのタイプを[Date]に設定し、[Date Pattern] (日付パターン)フィールドに*yyyy*と入力します。コンポーネントでは、スキーマで定義されたパターンに基づき、日付形式を文字列に変換してから文字列比較が開始されます。 |
| [Key Definition] (キー定義) - [Matching Function] (マッチングファンクション)カラム | リストからマッチングアルゴリズムを選択します。各アルゴリズムの詳細は、[マッチングアルゴリズム](https://help.qlik.com/talend/ja-JP/data-matching/8.0/tmatchgroup-properties-for-apache-spark-batch#matching-algorithms-section)をご覧ください。 |
| [Key Definition] (キー定義) - [Custom Matcher Class] (カスタムマッチャークラス)カラム | マッチングタイプとして[Custom] (カスタム)を選択した場合は、使用するカスタムクラス(外部マッチングアルゴリズム)を指すパスを入力します。このパスはライブラリーファイル(*.jar*ファイル)で定義されます。このファイルは[LibraryLoad]コンポーネントを使用してインポートできます。<br><br>たとえば、ユーザー定義の*mydistance.jar*ライブラリーにある*org/talend/mydistance*ディレクトリーに保管されている*MyDistance.class*クラスを使用するには、*org.talend.mydistance.MyDistance*といパスを入力します。 |
| [Key Definition] (キー定義) - [Tokenized measure] (トークン化された測定)カラム | トークン化とは文字列を単語に分割する概念です。選択したアルゴリズムのトークン化された測定を計算するために使用する方法を選択します。<br><br><ul> <li> <span>[NO] (なし)</span>: 文字列にトークン化メソッドは使用されません。このオプションでは、「John Doe」と「Jon Doe」がマッチングします。</li> <li> <span>[Same place] (同じ場所)</span>: 2つの文字列を単語で2つのリスト(list1とlist2)に分割します。list1の各エレメントをlist2の同じ場所にあるエレメントに関連付けます。このメソッドを使用すると、"She is red and he is pink"と"Catherine is red and he is pink"はマッチングします。</li> <li> <span>[Same order] (同じ順序)</span>: 2つの文字列を単語で2つのリスト(list1とlist2)に分割し、list1がlist2よりも短いと想定します。list1のエレメントをlist2のエレメントと同じ順序で関連付けてみます。このメソッドを使用すると、「John Doe」と「John B. Doe」がマッチングします。</li> <li>このメソッドは、数語の文字列でのみ使用する必要があります。そうしないと組み合わせの数が非常に大きくなります。</li> <li> <span>[Any order] (任意の順序)</span>: 2つの文字列を単語で2つのリスト(list1とlist2)に分割し、list1がlist2よりも短いと想定します。使用された類似性に関して最高のグローバル類似度になるようlist1の各単語のlist2の単語への割り当てを試行します。 <p>このメソッドを使用すると、「John Doe」と「Doe John」がマッチングします。</p> </li> </ul> |
| [Key Definition] (キー定義) - [Confidence Weight] (信頼度の重み付け)カラム | キー定義の各属性(カラム)の数値加重を設定するために使われます。<br><br>数値またはコンテキスト変数を入力できます。<br><br>0よりも大きい整数を指定してください。 |
| [Key Definition] (キー定義) - [Handle Null] (Nullを処理)カラム | null値を処理するには、カラムから使用するnull演算子をリストから選択します。<br><br>[Null Match Null] (NullがNullにマッチング): Null属性は、他のNull属性にのみマッチングします。<br><br>[Null Match None] (Nullのマッチングなし): Null属性は、他の属性とマッチングしません。<br><br>[Null Match ALL] (Nullがすべてにマッチング): Null属性は、他のすべての属性の値とマッチングします。<br><br>たとえば*name*カラムと*firstname*カラムがあり、名前が決してNullにはならない場合も、最初の名前はNullになることがあります。<br><br>2つのレコードが次の場合:<br><br>"Doe", "John"<br><br>"Doe", ""<br><br>選択した演算子によって以下の2つのレコードがマッチングする場合とマッチングしない場合があります:<br><br>[Null Match Null] (NullがNullにマッチング): マッチングしません。<br><br>[Null Match None] (Nullのマッチングなし): マッチングしません。<br><br>[Null Match All] (Nullがすべてにマッチング): マッチングします。<br><br>次のレコードの場合:<br><br>"Doe", ""<br><br>"Doe", ""<br><br>[Null Match Null] (NullがNullにマッチング): マッチングします。<br><br>[Null Match None] (Nullのマッチングなし): マッチングしません。<br><br>[Null Match All] (Nullがすべてにマッチング): マッチングします。 |
| [Match Threshold] (マッチングしきい値) | マッチ率を入力します。確率が設定値以上になる場合、2件のデータレコードはマッチングしていると見なされます。<br><br>マッチングルールごとに異なるマッチングしきい値を入力できます。 |
| [Blocking Selection] (ブロッキング選択) | 必要に応じて、処理されたデータをブロックに分割する入力フローのカラムを選択します。これは通常「ブロッキング」と呼ばれます。<br><br>ブロッキングにより、検査する必要があるレコードのペアの数が減ります。ブロッキングでは、入力データがパーティションに分割され、比較するペアの数を減らすと共に、徹底的なマッチを行ってマッチ率を向上させます。比較は各ブロックのレコードペアに制限されます。<br><br>非常に大きなデータを処理する場合は、ブロッキングカラムを使用すると非常に便利です。 |

## 詳細設定

| プロパティ | 説明 |
| --- | --- |
| [Multiple output] (複数の出力) | [Separate output] (出力の分離)チェックボックスをオンにすると、複数の出力フローが使えます。<br><br><ul> <li> <span>[Uniques] (一意)</span>: グループサイズが<em>1</em>に等しい場合、レコードはこのフローにリスト表示されます。 <p>レコードが一意でない場合は、次のようになります。</p> </li> <li> <span>[Matches] (マッチング)</span>: グループのクオリティが<span>[Confident match threshold] (信頼できるマッチングしきい値)</span>フィールドで定義したしきい値と同等かそれ以上の場合、レコードはこのフローにリスト表示されます。 </li> <li> <span>[Suspects] (サスペクト)</span>: グループのクオリティが<span>[Confident match threshold] (信頼できるマッチングしきい値)</span>フィールドで定義したしきい値を下回る場合、レコードはこのフローにリスト表示されます。</li> </ul><br><br>[Confident match threshold] (信頼できるマッチングしきい値)：現在の[Match threshold] (マッチングしきい値)と*1*の間の数値を設定するために使われます。このしきい値により、グループのクオリティを信頼できます。 |
| [Multi-pass] (マルチパス) | このチェックボックスを選択すると、tMatchGroupコンポーネントは、そのジョブの前の別のtMatchGroupからデータセットを受け取ることができます。これにより、さまざまなブロッキングキーに基づいてデータパーティションを作成し、各tMatchGroupコンポーネントによって受け取ったグループの絞り込みを行えます。<br><br>マルチパスマッチングでは、すべてのマスターレコードが生成されますが、中間マスターレコードは出力フローから削除されます。最後のマスターと元のレコードだけが最後に保管されます。<br><br>最初のtMatchGroupからの単一のマスターレコードが2番目のtMatchGroupが渡された後に1つのグループにマージされると、そのグループでの順序がジョブを実行するたびに変わることがあります。<br><br>ジョブの例は、[複数のパスで顧客データをマッチング](https://help.qlik.com/talend/ja-JP/data-matching/8.0/matching-customer-data-through-multiple-passes)をご覧ください。 |
| [Sort the output data by GID] (出力データをGIDでソート) | このチェックボックスを選択すると、出力データがグループIDでグルーピングされます。<br><br>出力は、グループ識別子によって降順の英数字でソートされます。 |
| [Output distance details] (距離の詳細を出力) | このチェックボックスを選択すると、コンポーネントのスキーマに出力カラム*[MATCHING\_DISTANCES]*が追加されます。このカラムには、各グループの入力レコードとマスタレコードの違いが示されます。<br><br>情報メモ重要: ジョブで2つのtMatchGroupコンポーネントを使用しており、一方のコンポーネントでこのオプションを選択した場合は、リンクさせる前に、両方のtMatchGroupコンポーネントでこのチェックボックスをオンにしておく必要があります。このチェックボックスをオンにする前にコンポーネントをリンクした場合は、ジョブフロー内の2番目のコンポーネントでこのチェックボックスをオンにして、続いて最初のコンポーネントで同チェックボックスをオンにします。この手順を守らないと、同じ名前の出力スキーマ内に2つのカラムがあるため、問題が発生するおそれがあります。片方のtMatchGroupコンポーネントだけでこのチェックボックスをオンにすると、スキーマの不一致の問題が発生するおそれがあります。 |
| [Display detailed labels] (詳細ラベルの表示) | このチェックボックスは、Output distance detailsが選択されている時に利用できます。<br><br>このチェックボックスを選択すると、マッチ率だけでなく、適用されたルールのキー属性として使用するカラムの名前も、出力*[MATCHING\_DISTANCES]*カラムに表示されます。<br><br>たとえば、*lname* (姓)と*fname* (名)フィールドでマッチングする場合、チェックボックスがオンの場合はfname:1.0\|lname:0.97が出力され、オフの場合は1.0\|0.97が出力されます。 |
| ウィザードオープン時にマッチング計算を無効化 | このチェックボックスを選択すると[Configuration] (設定)ウィザードが開かれますが、ウィザードで定義されたマッチングルールは実行されません。<br><br>これにより、コンポーネントの操作体験を向上させることができます。そうしない場合、ウィザードの起動に時間がかかることがあります。 |

## グローバル変数

| 変数 | 説明 |
| --- | --- |
| グローバル変数 | ERROR\_MESSAGE: エラーが発生した時にコンポーネントによって生成されるエラーメッセージ。これはAfter変数で、文字列を返します。この変数はコンポーネントにこのチェックボックスが存在し、[Die on error] (エラー発生時に強制終了)がオフになっている場合のみ機能します。<br><br>Flow変数はのコンポーネントの実行中に機能し、After変数はコンポーネントの実行後に機能します。<br><br>フィールドまたは式に変数を入力する場合は、Ctrl + スペースを押して変数リストにアクセスし、使用する変数を選択します。<br><br>変数の詳細は、[コンテキストと変数を使用](https://help.qlik.com/talend/r/ja-JP/8.0/studio-user-guide/contexts-and-variables)をご覧ください。 |

## 使用方法

| 使用方法のガイダンス | 説明 |
| --- | --- |
| **使用ルール** | このコンポーネントは、中間ステップです。入力フロート出力フローが必要になります。 |

## マッチングアルゴリズム

このリストでは、[Matching Function] (マッチングファンクション)カラムの各マッチングアルゴリズムについて説明します:

* [Exact] (厳密): 処理された各エントリーを、まったく同じ値を持つ可能な全参照エントリーにマッチングさせます。2つの文字列が完全にマッチングした場合、*1*が返されますが、マッチングしない場合は*0*が返されます。
* [Exact - ignore case] (厳密 - 大文字と小文字を無視): 処理された各エントリーを、値の大文字と小文字を無視して、まったく同じ値を持つすべての参照可能なエントリーにマッチングさせます。
* Soundex: 処理されたエントリーを標準英語の音声アルゴリズムに従ってマッチングさせます。たとえば「Hello」、「H400」など、英語で発音されるように文字列の音声インデックスを作成します。漢字はサポートしていません。
* [Levenshtein] (編集距離): ある文字列を別の文字列に変換するために必要な編集(挿入、削除、置換)の最小回数を計算します。tMatchGroupコンポーネントでこのアルゴリズムを使用した場合、最大距離を指定する必要はありません。コンポーネントにより距離に基づいてマッチ率が自動的に計算されます。このマッチングスコアは、[Confidence Weight] (信頼度の重み付け)フィールドに割り当てたウェイトに基づいて、グローバルマッチング計算に使用されます。
* [Metaphone] (メタフォン): 発音によるエントリーの索引付けのための音声アルゴリズムに基づいています。ルックアップ参照のすべてのエントリーの発音をロードし、メインフローのすべてのエントリーを参照フローのエントリーに対してチェックします。 漢字はサポートしていません。
* [Double Metaphone] (二重メタフォン): 音声アルゴリズムの新しいバージョン。元のアルゴリズムよりも正確な結果をもたらすメタフォン。文字列のプライマリーコードとセカンダリーコードの両方を返すことができます。これはあいまいなケースや共通の系統を持つ姓の複数のバリエーションに対応しています。 漢字はサポートしていません。
* Soundex FR: 標準フランス語の音声アルゴリズムに従って処理されたエントリーにマッチングさせます。漢字はサポートしていません。
* Jaro: スペルの逸脱に従って処理されたエントリーにマッチングさせます。2つの文字列の間でマッチングする文字数を数えます。距離の値が高いほど文字列の類似性が高いことを表します。
* Jaro-Winkler: Jaroの亜種で、文字列の始まりを重視します。
* [Fingerprint key] (指紋キー): 次のシーケンシャルプロセスを実行した後、エントリーにマッチングさせます。
  1. 先頭と末尾の空白を削除します。
  2. すべての文字を小文字に変更します。 漢字はサポートしていません。
  3. すべての句読点と制御文字を削除します。
  4. 文字列を空白で区切られたトークンに分割します。
  5. トークンをソートして重複を削除します。
  6. トークンを再結合します。文字列部分がソートされるため、トークンの順序は関係ありません。したがって、*Cruise, Tom*と*Tom Cruise*の両方が指紋*cruise tom*で終わるので、同じクラスターで終わります。
  7. 拡張西洋文字をASCII表現に正規化します(たとえば、*gödel*から*godel*へ)。これは、ASCII のみのキーボードで拡張文字を入力する時のデータ入力ミスを再現します。ただし、この手順は間違った結果につながる可能性もあります。たとえば、*gödel*と*godél*の両方が指紋として*godel*となりますが、別の名前になる可能性があります。したがって、拡張文字が大幅な差別化の役割を果たすデータセットでは、これはあまり効果的ではありません。
* q-grams: 文字列を長さqの文字ブロックに分割して処理されたエントリーにマッチし、q 長さグラムの数を作成できるようにします。マッチング結果は、q-gramマッチに対して取り得るq-gramの数となります。
* [Hamming]: 文字列を同じ長さの別の文字列に変換するために必要な置換の最小数を計算します。たとえば、「masking」と「pairing」との間のハミング距離は3です。
* custom...: custom Matcherカラムを使い、Javaライブラリーから外部マッチングアルゴリズムをロードできます。

外部Javaライブラリーをロードする方法は、[tLibraryLoad](https://help.qlik.com/talend/ja-JP/components/8.0/library-import/tlibraryload)をご覧ください。

カスタムマッチングアルゴリズムを作成する方法は、[カスタムマッチングアルゴリズムの作成](https://help.qlik.com/talend/en-US/data-matching/8.0/creating-custom-matching-algorithm)をご覧ください。

カスタムマッチングアルゴリズムの使用方法に関する関連のシナリオについては、[カスタム一致アルゴリズムを使用したエントリーのマッチング](https://help.qlik.com/talend/ja-JP/data-matching/8.0/using-custom-matching-algorithm-to-match-entries)をご覧ください。