Aller au contenu principal

lateralJoin

Jointures latérales avec un autre DataFrame, en utilisant l'expression de jointure donnée.

Syntaxe

lateralJoin(other: "DataFrame", on: Optional[Column] = None, how: Optional[str] = None)

parameter

parameter

Type

Description

other

DataFrame

Côté droit de la jointure.

on

Colonne, facultative

une expression de jointure (colonne).

how

str, facultatif

default inner. Doit être l'un des éléments suivants : inner, cross, left, leftouter et left_outer.

parameter

Type

Description

other

DataFrame

Côté droit de la jointure.

on

Colonne, facultative

une expression de jointure (colonne).

how

str, facultatif

default inner. Doit être l'un des éléments suivants : inner, cross, left, leftouter et left_outer.

Renvoie

DataFrame: DataFrame joint.

Notes

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 d'une sous-requête ou d'une table dérivée qui calcule un résultat spécifique à cette ligne. Le côté droit DataFrame peut faire référence à des colonnes de la ligne actuelle du côté gauche DataFrame, permettant des résultats plus complexes et dépendants du contexte qu'une jointure standard.

Exemples

Python
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|
# ...
# +-----------+-------+--------+----------+-------+--------+