【问题标题】:Pyspark aggregation using dictionary with countDistinct functionsPyspark 聚合使用带有 countDistinct 函数的字典
【发布时间】:2021-09-18 09:52:44
【问题描述】:

我正在尝试在数据帧上运行聚合。然后我想计算每一列的不同值。我生成一个用于聚合的字典,例如:

from pyspark.sql.functions import countDistinct

expr = {x: "countDistinct" for x in df.columns if x is not 'id'}
df.groupBy("id").agg(expr).show()

我得到错误:

AnalysisException:未定义函数:'countdistinct'。该函数既不是注册的临时函数,也不是在数据库'default'中注册的永久函数。;

如果我直接使用“countDistinct”,它会起作用:

df.groupBy("id").agg(countDistinct('hours'))

Out[1]: DataFrame[id: int, count(hours): bigint]

这不起作用:

df.groupBy("id").agg({'hours':'countDistinct'}).show()

AnalysisException:未定义函数:'countdistinct'。该函数既不是注册的临时函数,也不是在数据库'default'中注册的永久函数。;

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: sql dataframe pyspark group-by


    【解决方案1】:

    似乎countDistinct 不是“内置聚合函数”。

    将不同的计数列直接传递给agg 可以解决这个问题:

    cols = [countDistinct(x) for x in df.columns if x != 'id']
    
    df.groupBy('id').agg(*cols).show()
    

    【讨论】:

      猜你喜欢
      • 2015-07-31
      • 2019-09-02
      • 2022-07-20
      • 2011-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      相关资源
      最近更新 更多