lateralJoin

Laterala kopplingar med en annan DataFrame med hjälp av det angivna kopplingsuttrycket.

Syntax

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

Parameters

Parameter Type Beskrivning
other DataFrame Höger sida av kopplingen.
on Kolumn, valfritt ett kopplingsuttryck (kolumn).
how str, valfritt standard inner. Måste vara en av: inner, cross, left, leftouteroch left_outer.

Retur

DataFrame: Ansluten dataram.

Notes

En lateral koppling (kallas även för en korrelerad koppling) är en typ av koppling där varje rad från en DataFrame används som indata till en underfråga eller en härledd tabell som beräknar ett resultat som är specifikt för den raden. Den högra sidan DataFrame kan referera till kolumner från den aktuella raden på vänster sida DataFrame, vilket ger mer komplexa och kontextberoende resultat än en standardkoppling.

Exempel

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