假设我们有一个包含
name
和
age
列的DataFrame,我们想按照
name
列分组并计算每个分组中
age
值不小于30的不同值的数量。下面是代码示例:
from pyspark.sql.window import Window
from pyspark.sql.functions import countDistinct, col
# 创建DataFrame
data = [("Alice", 25), ("Bob", 35), ("Alice", 30), ("Bob", 40), ("Charlie", 30)]
df = spark.createDataFrame(data, ["name", "age"])
# 定义窗口规范
w = Window.partitionBy("name")
# 计算每个分组中age不小于30的不同值的数量
result = df.select(col("name"), countDistinct(col("age")).over(w).alias("count")).where(col("age") >= 30).distinct().orderBy("name")
# 显示结果
result.show()
运行以上代码,将得到以下结果:
+-------+-----+
| name|count|
+-------+-----+
| Alice| 2|
| Bob| 2|
|Charlie| 1|
+-------+-----+
以上代码首先创建了一个包含name
和age
列的DataFrame,然后定义了一个窗口规范,将数据按name
列分组。接下来,使用countDistinct
和over
函数计算每个分组中age
值不小于30的不同值的数量,并使用distinct
函数去重。最后,使用orderBy
函数对结果按name
列进行升序排列,并显示结果。