PySpark-向count(*)添加一列

时间:2018-09-24 13:09:58

标签: apache-spark pyspark apache-spark-sql

我有以下脚本(我删除了所有列名,等等。为了更轻松地了解我在做什么,这很混乱!)

我需要添加一个与SQL中的count(*)等效的列。

因此,如果我已按域对用户使用情况进行了分组,则可能会看到以下内容-其中的计数是与所有先前列条件匹配的记录数。

domain.co.uk/英国用户32433 domain.co.uk/home欧盟用户43464 等等...

我确定以前在Stackoverflow上有人问过它,但是我环顾四周,找不到任何引用!

vpx_cont_filter = vpx_data\
        .coalesce(1000)\
        .join(....)\
        .select(....)\
        .groupBy(....)\
        .agg(
           ....
            )\
        .select(....)

1 个答案:

答案 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