Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
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|
# ...
# +-----------+-------+--------+----------+-------+--------+