Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Jointures latérales avec un autre DataFrame, à l’aide de l’expression de jointure donnée.
Syntaxe
lateralJoin(other: "DataFrame", on: Optional[Column] = None, how: Optional[str] = None)
Paramètres
| Paramètre | Type | Description |
|---|---|---|
other |
DataFrame | Côté droit de la jointure. |
on |
Colonne, facultatif | une expression de jointure (Column). |
how |
str, facultatif | par défaut inner. Doit être l’un des suivants : inner, , crossleft, leftouter, et left_outer. |
Retours
DataFrame: DataFrame joint.
Remarques
Une jointure latérale (également appelée jointure corrélée) est un type de jointure où chaque ligne d’un DataFrame est utilisée comme entrée dans une sous-requête ou une table dérivée qui calcule un résultat spécifique à cette ligne. Le côté DataFrame droit peut référencer des colonnes à partir de la ligne actuelle du côté DataFramegauche, ce qui permet d’obtenir des résultats plus complexes et dépendants du contexte qu’une jointure standard.
Exemples
from pyspark.sql import functions as sf
from pyspark.sql import Row
customers_data = [
Row(customer_id=1, name="Alice"), Row(customer_id=2, name="Bob"),
Row(customer_id=3, name="Charlie"), Row(customer_id=4, name="Diana")
]
customers = spark.createDataFrame(customers_data)
orders_data = [
Row(order_id=101, customer_id=1, order_date="2024-01-10",
items=[Row(product="laptop", quantity=5), Row(product="mouse", quantity=12)]),
Row(order_id=102, customer_id=1, order_date="2024-02-15",
items=[Row(product="phone", quantity=2), Row(product="charger", quantity=15)]),
Row(order_id=105, customer_id=1, order_date="2024-03-20",
items=[Row(product="tablet", quantity=4)]),
Row(order_id=103, customer_id=2, order_date="2024-01-12",
items=[Row(product="tablet", quantity=8)]),
Row(order_id=104, customer_id=2, order_date="2024-03-05",
items=[Row(product="laptop", quantity=7)]),
Row(order_id=106, customer_id=3, order_date="2024-04-05",
items=[Row(product="monitor", quantity=1)]),
]
orders = spark.createDataFrame(orders_data)
customers.join(orders, "customer_id").lateralJoin(
spark.tvf.explode(sf.col("items").outer()).select("col.*")
).select(
"customer_id", "name", "order_id", "order_date", "product", "quantity"
).orderBy("customer_id", "order_id", "product").show()
# +-----------+-------+--------+----------+-------+--------+
# |customer_id| name|order_id|order_date|product|quantity|
# +-----------+-------+--------+----------+-------+--------+
# | 1| Alice| 101|2024-01-10| laptop| 5|
# | 1| Alice| 101|2024-01-10| mouse| 12|
# ...
# +-----------+-------+--------+----------+-------+--------+