countDistinct和distinct.count

时间:2018-04-18 15:25:23

标签: sql scala apache-spark apache-spark-sql

为什么我为..agg(countDistinct("member_id") as "count")..distinct.count获得不同的输出? 差异是否与select count(distinct member_id)select distinct count(member_id)之间的差异相同?

3 个答案:

答案 0 :(得分:4)

  

为什么我将..agg(countDistinct(" member_id"))的不同输出作为" count")和..distinct.count?

因为.distinct.count是相同的:

SELECT COUNT(*) FROM (SELECT DISTINCT member_id FROM table)

..agg(countDistinct("member_id") as "count")

SELECT COUNT(DISTINCT member_id) FROM table

COUNT(*) uses different rules than COUNT(column) when nulls are encountered

答案 1 :(得分:3)

df.agg(countDistinct("member_id") as "count")

返回member_id列的不同值的数量,忽略所有其他列,而

df.distinct.count

将计算DataFrame中不同记录的数量 - 其中" distinct"表示所有列的值相同。

所以,例如,DataFrame:

+-----------+---------+
|member_name|member_id|
+-----------+---------+
|          a|        1|
|          b|        1|
|          b|        1|
+-----------+---------+

只有一个不同的member_id值但有两个不同的记录,因此agg选项将返回1而后者将返回2.

答案 2 :(得分:1)

第一个命令:

DF.agg(countDistinct("member_id") as "count")

返回与select count distinct(member_id) from DF相同的内容。

第二个命令:

DF.distinct.count

实际上是从DF获取不同的记录或删除重复项,然后计算。