Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Lateral joins with another DataFrame, using the given join expression.
Syntax
lateralJoin(other: "DataFrame", on: Optional[Column] = None, how: Optional[str] = None)
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
other |
DataFrame | Rechte Seite der Verknüpfung. |
on |
Spalte, optional | ein Verknüpfungsausdruck (Column). |
how |
str, optional | default inner. Muss eine von: inner, cross, , left, leftouterund left_outer. |
Rückkehr
DataFrame: Verknüpftes DataFrame.
Hinweise
Eine laterale Verknüpfung (auch als korrelierte Verknüpfung bezeichnet) ist ein Verknüpfungstyp, bei dem jede Zeile aus einem DataFrame als Eingabe für eine Unterabfrage oder eine abgeleitete Tabelle verwendet wird, die ein für diese Zeile spezifisches Ergebnis berechnet. Auf der rechten Seite DataFrame kann auf Spalten aus der aktuellen Zeile der linken Seite DataFrameverwiesen werden, sodass komplexere und kontextabhängigere Ergebnisse als eine Standardverknung möglich sind.
Beispiele
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|
# ...
# +-----------+-------+--------+----------+-------+--------+