我有以下脚本(我删除了所有列名,等等。为了更轻松地了解我在做什么,这很混乱!)
我需要添加一个与SQL中的count(*)等效的列。
因此,如果我已按域对用户使用情况进行了分组,则可能会看到以下内容-其中的计数是与所有先前列条件匹配的记录数。
domain.co.uk/英国用户32433 domain.co.uk/home欧盟用户43464 等等...
我确定以前在Stackoverflow上有人问过它,但是我环顾四周,找不到任何引用!
vpx_cont_filter = vpx_data\
.coalesce(1000)\
.join(....)\
.select(....)\
.groupBy(....)\
.agg(
....
)\
.select(....)
答案 0 :(得分:2)
您是说要在agg中添加一列来统计每个groupBy的所有发生次数吗?
然后可以添加此内容:
.agg(
F.count(F.lit(1)).alias("total_count"),
...
)
顺便说一句,我不认为您被迫使用 F.lit(1)。在Spark源代码中,如果您指定星号而不是 F.lit(1)
,则具有匹配的大小写// Turn count(*) into count(1)
case s: Star => Count(Literal(1))
case _ => Count(e.expr)
因此,我认为 F.count(“ *”)也可以工作
PS: 我使用的是 F。,因为我假设您是这样导入功能包的
from pyspark.sql import functions as F