标量

Column返回包含一行和一列的 SCALAR 子查询的对象。

Syntax

scalar()

退货

Column:表示 Column SCALAR 子查询的对象。

备注

此方法 scalar() 可用于从 DataFrame 提取 Column 表示标量值的对象,尤其是在 DataFrame 从聚合或单值计算结果时。 然后,可以在子句中直接使用返回 Column 的,也可以在外部 DataFrame 上的筛选器中 select 用作谓词,从而基于标量值启用动态数据筛选和计算。

示例

data = [
    (1, "Alice", 45000, 101), (2, "Bob", 54000, 101), (3, "Charlie", 29000, 102),
    (4, "David", 61000, 102), (5, "Eve", 48000, 101),
]
employees = spark.createDataFrame(data, ["id", "name", "salary", "department_id"])

from pyspark.sql import functions as sf
employees.where(
    sf.col("salary") > employees.select(sf.avg("salary")).scalar()
).select("name", "salary", "department_id").orderBy("name").show()
# +-----+------+-------------+
# | name|salary|department_id|
# +-----+------+-------------+
# |  Bob| 54000|          101|
# |David| 61000|          102|
# |  Eve| 48000|          101|
# +-----+------+-------------+

employees.alias("e1").where(
    sf.col("salary")
    > employees.alias("e2").where(
        sf.col("e2.department_id") == sf.col("e1.department_id").outer()
    ).select(sf.avg("salary")).scalar()
).select("name", "salary", "department_id").orderBy("name").show()
# +-----+------+-------------+
# | name|salary|department_id|
# +-----+------+-------------+
# |  Bob| 54000|          101|
# |David| 61000|          102|
# +-----+------+-------------+