существует (Кадр данных)

Column Возвращает объект для subquery EXISTS.

Синтаксис

exists()

Возвраты

Column Column: объект, представляющий вложенный запрос EXISTS.

Примечания

Этот exists метод позволяет создать логический столбец, который проверяет наличие связанных записей в вложенных запросах. При применении в пределах DataFrameэтого метода можно фильтровать строки на основе того, существуют ли соответствующие записи в связанном наборе данных. Результирующий Column объект можно использовать непосредственно в условиях фильтрации или в качестве вычисляемого столбца.

Примеры

data_customers = [
    (101, "Alice", "USA"), (102, "Bob", "Canada"), (103, "Charlie", "USA"),
    (104, "David", "Australia")
]
data_orders = [
    (1, 101, "2023-01-15", 250), (2, 102, "2023-01-20", 300),
    (3, 103, "2023-01-25", 400), (4, 101, "2023-02-05", 150)
]
customers = spark.createDataFrame(
    data_customers, ["customer_id", "customer_name", "country"])
orders = spark.createDataFrame(
    data_orders, ["order_id", "customer_id", "order_date", "total_amount"])

from pyspark.sql import functions as sf
customers.alias("c").where(
    orders.alias("o").where(
        sf.col("o.customer_id") == sf.col("c.customer_id").outer()
    ).exists()
).orderBy("customer_id").show()
# +-----------+-------------+-------+
# |customer_id|customer_name|country|
# +-----------+-------------+-------+
# |        101|        Alice|    USA|
# |        102|          Bob| Canada|
# |        103|      Charlie|    USA|
# +-----------+-------------+-------+

customers.alias("c").where(
    ~orders.alias("o").where(
        sf.col("o.customer_id") == sf.col("c.customer_id").outer()
    ).exists()
).orderBy("customer_id").show()
# +-----------+-------------+---------+
# |customer_id|customer_name|  country|
# +-----------+-------------+---------+
# |        104|        David|Australia|
# +-----------+-------------+---------+