Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Laterální spojení s jiným datovým rámcem pomocí daného výrazu join.
Syntaxe
lateralJoin(other: "DataFrame", on: Optional[Column] = None, how: Optional[str] = None)
Parametry
| Parameter | Typ | Description |
|---|---|---|
other |
Datový rámec | Pravá strana spojení. |
on |
Sloupec, volitelný | výraz spojení (sloupec). |
how |
str, volitelné | výchozí hodnota inner. Musí být jedna z: inner, , crossleft, leftouter, a left_outer. |
Návraty
DataFrame: Připojený datový rámec.
Poznámky
Laterální spojení (označované také jako korelované spojení) je typ spojení, kde každý řádek z jednoho datového rámce slouží jako vstup do poddotazu nebo odvozené tabulky, která vypočítá výsledek specifický pro daný řádek. Pravá strana DataFrame může odkazovat na sloupce z aktuálního řádku levé strany DataFrame, což umožňuje složitější a kontextově závislé výsledky než standardní spojení.
Příklady
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|
# ...
# +-----------+-------+--------+----------+-------+--------+