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

时间:2017-02-10 14:56:55

标签: 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|
+----+---+---+

我有以下代码,它为我提供了一行的独特记录数:

old_table.groupby('name').agg(countDistinct('age'))

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

old_table.groupby('name').agg(countDistinct('age'), count('age))

错误:

NameError: name 'count' is not defined

有没有办法将计数添加到我的输出的非重复计数,这样我将有一个如下的输出表?

+----+-------------+-----+
|name|countDistinct|count|
+----+-------------+-----+
|Mark|            4|    7|
+----+-------------+-----+

1 个答案:

答案 0 :(得分:2)

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

您需要从 pyspark.sql.functions 中显式导入同名的 'count' 函数

from pyspark.sql.functions import count as _count

old_table.groupby('name').agg(countDistinct('age'), _count('age'))