lateralJoin

Lateral joins met een ander DataFrame, met behulp van de opgegeven join-expressie.

Syntaxis

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

Parameterwaarden

Kenmerk Typ Beschrijving
other DataFrame Rechts van de join.
on Kolom, optioneel een join-expressie (kolom).
how str, optioneel standaard inner. Moet een van: , , , en innercross. leftleftouterleft_outer

Retouren

DataFrame: Gekoppeld dataframe.

Aantekeningen

Een zijdelingse join (ook wel een gecorreleerde join genoemd) is een type join waarbij elke rij van één DataFrame wordt gebruikt als invoer voor een subquery of een afgeleide tabel waarmee een resultaat wordt berekend dat specifiek is voor die rij. De rechterkant DataFrame kan verwijzen naar kolommen uit de huidige rij van de linkerkant DataFrame, waardoor complexere en contextafhankelijke resultaten mogelijk zijn dan een standaarddeelname.

Examples

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