Pyspark 基于另一列的不同值对列进行计数

Pyspark 基于另一列的不同值对列进行计数,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我有一个像这样的spark数据框 event_name | id --------------- hello | 1 hello | 2 hello | 1 world | 1 hello | 3 world | 2 SELECT event_name, COUNT(DISTINCT id) as count FROM table_name WHERE event_name="hello" 我想根据唯一的“id”

我有一个像这样的spark数据框

event_name | id
---------------
hello      | 1
hello      | 2
hello      | 1
world      | 1
hello      | 3
world      | 2
SELECT event_name, COUNT(DISTINCT id) as count
FROM table_name
WHERE event_name="hello"
我想根据唯一的“id”计算特定事件“hello”的数量。SQL应该是这样的

event_name | id
---------------
hello      | 1
hello      | 2
hello      | 1
world      | 1
hello      | 3
world      | 2
SELECT event_name, COUNT(DISTINCT id) as count
FROM table_name
WHERE event_name="hello"
所以我的查询应该返回3而不是4表示“hello”,因为有两行id为“1”表示“hello”


如何使用pyspark SQL实现这一点?

这应该可以做到:

df.groupBy("event_name").agg(F.countDistinct("id")).show()

这就是SQL我可以使用spark的SQL函数而不是编写原始查询来执行相同的查询吗?这是我真正想要的,但那不是你展示的。我会回来的,谢谢。我只需要在groupBy()之前添加.where(F.col(“event_name”)=“hello”)。