为什么我为..agg(countDistinct("member_id") as "count")
和..distinct.count
获得不同的输出?
差异是否与select count(distinct member_id)
和select distinct count(member_id)
之间的差异相同?
答案 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获取不同的记录或删除重复项,然后计算。