Pyspark 中的逻辑计数

Logical with count in Pyspark

我是 Pyspark 的新手,我有一个问题要解决。

我有一个包含 4 列的数据框,分别是 customerspersonis_online_storecount:

customer PersonId is_online_store count
afabd2d2 4 true 1
afabd2d2 8 true 2
afabd2d2 3 true 1
afabd2d2 2 false 1
afabd2d2 4 false 1

我需要按照以下规则创建:

外观应该如何:

customer PersonId New_Column
afabd2d2 4 Hybrid
afabd2d2 8 Online
afabd2d2 3 Online
afabd2d2 2 Offline

customer + personId 分组并使用 when 表达式检查 is_online_store 列中的所有值是否为 true / false或两者的混合,例如使用 bool_and 函数:

from pyspark.sql import functions as F

df1 = df.groupBy("customer", "PersonId").agg(
    F.when(F.expr("bool_and(is_online_store)"), "Online")
     .when(F.expr("bool_and(!is_online_store)"), "Offline")
     .otherwise("Hybrid").alias("New_Column")
)

df1.show()
#+--------+--------+----------+
#|customer|PersonId|New_Column|
#+--------+--------+----------+
#|afabd2d2|       2|   Offline|
#|afabd2d2|       8|    Online|
#|afabd2d2|       4|    Hybrid|
#|afabd2d2|       3|    Online|
#+--------+--------+----------+