lateralJoin

Lateral bergabung dengan DataFrame lain, menggunakan ekspresi gabungan yang diberikan.

Sintaksis

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

Parameter-parameternya

Parameter Tipe Deskripsi
other DataFrame Sisi kanan gabungan.
on Kolom, opsional ekspresi gabungan (Kolom).
how str, opsional default inner. Harus salah satu dari: inner, , crossleft, leftouter, dan left_outer.

Pengembalian Barang

DataFrame: Bergabung dengan DataFrame.

Catatan

Gabungan lateral (juga dikenal sebagai gabungan yang berkorelasi) adalah jenis gabungan di mana setiap baris dari satu DataFrame digunakan sebagai input ke subkueri atau tabel turunan yang menghitung hasil khusus untuk baris tersebut. Sisi kanan DataFrame dapat mereferensikan kolom dari baris saat ini dari sisi DataFramekiri , memungkinkan hasil yang lebih kompleks dan tergantung konteks daripada gabungan standar.

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