lateralJoin

Combinaciones laterales con otro DataFrame mediante la expresión de combinación especificada.

Sintaxis

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

Parámetros

Parámetro Tipo Descripción
other DataFrame Lado derecho de la combinación.
on Columna, opcional una expresión de combinación (Column).
how str, opcional valor predeterminado inner. Debe ser uno de los siguientes: inner, , crossleft, leftoutery left_outer.

Devoluciones

DataFrame: DataFrame unido.

Notas

Una combinación lateral (también conocida como combinación correlacionada) es un tipo de combinación donde cada fila de un DataFrame se usa como entrada para una subconsulta o una tabla derivada que calcula un resultado específico de esa fila. El lado DataFrame derecho puede hacer referencia a columnas de la fila actual del lado DataFrameizquierdo, lo que permite resultados más complejos y dependientes del contexto que una combinación estándar.

Ejemplos

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