Apache Spark 中的 agg(count) 不起作用

Bri*_*ers 5 apache-spark pyspark

尝试使用聚合在 Apache Spark (PySpark) 中执行聚合我的数据帧。

+----+---+---+
|name|age| id|
+----+---+---+
|Mark|  4|  1|
|Mark|  4|  2|
|Mark|  5|  3|
|Mark|  5|  4|
|Mark|  5|  5|
|Mark|  6|  6|
|Mark|  8|  7|
+----+---+---+
Run Code Online (Sandbox Code Playgroud)

我有以下代码,它为我提供了一行的不同记录计数:

old_table.groupby('name').agg(countDistinct('age'))
Run Code Online (Sandbox Code Playgroud)

我尝试添加正常计数作为聚合的另一个输出,但它会引发错误:

old_table.groupby('name').agg(countDistinct('age'), count('age))
Run Code Online (Sandbox Code Playgroud)

错误:

NameError: name 'count' is not defined
Run Code Online (Sandbox Code Playgroud)

有什么方法可以将计数添加到输出的不同计数中,这样我将得到如下所示的输出表?

+----+-------------+-----+
|name|countDistinct|count|
+----+-------------+-----+
|Mark|            4|    7|
+----+-------------+-----+
Run Code Online (Sandbox Code Playgroud)

小智 5

您正在使用的built-in函数“count”需要一个可迭代的对象,而不是列名。

您需要显式导入具有相同名称的“count”函数pyspark.sql.functions

from pyspark.sql.functions import count as _count

old_table.groupby('name').agg(countDistinct('age'), _count('age'))
Run Code Online (Sandbox Code Playgroud)