J'ai une trame de données comme ceci:Manipulation Rejoignez OU Spark
+---+---+---+---+---+
|AId| A1| A2| A3| A4|
+---+---+---+---+---+
| 1| *| a| b| c|
| 2| *| *| b| c|
| 3| c| a| b| c|
| 4| *| *| *| c|
| 5| *| *| *| *|
+---+---+---+---+---+
que je voudrais rejoindre sur:
+---+---+---+---+---+----+
|BId| B1| B2| B3| B4|Code|
+---+---+---+---+---+----+
| 1| c| a| b| c| AO|
| 2| b| a| b| c| AS|
| 3| b| b| b| c| AT|
| 4| a| d| d| c| BO|
| 5| d| a| c| b| BS|
| 6| a| b| b| c| BT|
| 7| d| d| d| c| CO|
| 8| d| d| d| d| CS|
+---+---+---+---+---+----+
pour correspondre à une carte d'identité à la règle. Cependant, * est un caractère générique. Cela correspondra à n'importe quoi. Dans l'exemple ci-dessus AId == 1 correspondra à BId 1 et 2, AId == 3 ne correspondra qu'à BId 1, AId == 4 correspondra à tous sauf 5 et 8, et AId == 5 correspondra à tous les 8.
Quelle serait la meilleure façon d'aborder cela? La requête semble chère dans Spark, et de plus Spark n'a pas de bloc opératoire intégré. L'alternative semble faire l'affaire - quand A1-A4 doit définir un drapeau, puis revenir en arrière et rejoindre. Un point délicat est également que les caractères génériques peuvent apparaître 1-4 fois dans la première table, dans n'importe quelle colonne, bien qu'ils n'apparaissent pas dans la seconde.