Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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|
# ...
# +-----------+-------+--------+----------+-------+--------+