为什么我得到不同的..agg(countDistinct("member_id") as "count")
和..distinct.count
输出?select count(distinct member_id)
和select distinct count(member_id)
之间的区别相同吗?
为什么我得到不同的输出..agg(countDistinct("member_id"( 作为 "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(*)
使用的规则与遇到空值时COUNT(column)
不同的规则。
df.agg(countDistinct("member_id") as "count")
返回member_id
列的非重复值数,忽略所有其他列,而
df.distinct.count
将计算数据帧中不同记录的数量 - 其中"不同"表示所有列的值相同。
因此,例如,数据帧:
+-----------+---------+
|member_name|member_id|
+-----------+---------+
| a| 1|
| b| 1|
| b| 1|
+-----------+---------+
只有一个不同的member_id
值,但有两个不同的记录,因此agg
选项将返回 1,而后者将返回 2。
第一个命令:
DF.agg(countDistinct("member_id") as "count")
返回与 select count distinct(member_id) from DF
相同的返回。
第二个命令:
DF.distinct.count
实际上是获取不同的记录或从 DF 中删除所有重复项,然后进行计数。