Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Боковое соединение с другим кадром данных с помощью заданного выражения соединения.
Синтаксис
lateralJoin(other: "DataFrame", on: Optional[Column] = None, how: Optional[str] = None)
Параметры
| Параметр | Тип | Описание |
|---|---|---|
other |
DataFrame | Справа от соединения. |
on |
Столбец, необязательный | выражение соединения (столбец). |
how |
str, необязательный | по умолчанию inner. Должен быть одним из следующих: inner, cross, leftи leftouterleft_outer. |
Возвраты
DataFrame: присоединенный кадр данных.
Примечания
Боковое соединение (также известное как сопоставленное соединение) — это тип соединения, в котором каждая строка из одного кадра данных используется в качестве входных данных для подзапроса или производной таблицы, которая вычисляет результат, характерный для этой строки. Правая сторона может ссылаться на столбцы из текущей строки левой стороны DataFrameDataFrame, что позволяет получить более сложные и зависимые от контекста результаты, чем стандартное соединение.
Примеры
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|
# ...
# +-----------+-------+--------+----------+-------+--------+