Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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|
# ...
# +-----------+-------+--------+----------+-------+--------+