apache-spark - 如何在 PySpark 中找出组中列的唯一元素数?
问题描述
我有一个 PySpark 数据框-
df1 = spark.createDataFrame([
("u1", 1),
("u1", 2),
("u2", 1),
("u2", 1),
("u2", 1),
("u3", 3),
],
['user_id', 'var1'])
print(df1.printSchema())
df1.show(truncate=False)
输出-
root
|-- user_id: string (nullable = true)
|-- var1: long (nullable = true)
None
+-------+----+
|user_id|var1|
+-------+----+
|u1 |1 |
|u1 |2 |
|u2 |1 |
|u2 |1 |
|u2 |1 |
|u3 |3 |
+-------+----+
现在我想对所有唯一用户进行分组,并在新列中显示他们的唯一 var 数量。所需的输出看起来像 -
+-------+---------------+
|user_id|num_unique_var1|
+-------+---------------+
|u1 |2 |
|u2 |1 |
|u3 |1 |
+-------+---------------+
我可以使用 collect_set 并制作一个 udf 来查找集合的长度。但我认为必须有更好的方法来做到这一点。如何在一行代码中实现这一目标?
解决方案
df1.groupBy('user_id').agg(F.countDistinct('var1').alias('num')).show()
countDistinct正是我所需要的。
输出-
+-------+---+
|user_id|num|
+-------+---+
| u3| 1|
| u2| 1|
| u1| 2|
+-------+---+
推荐阅读
- c# - 如何在用户 pc 上创建本地 postgresql 数据库
- laravel - 如何在 Laravel 中使用 spatie 权限中间件?
- java - Android Studio BackgroundService 在没有用户交互的情况下一直运行?
- java - 如何在spring中创建自定义查询方法生成器
- javascript - HTML输入元素在EJS中使用电子返回空格
- bash - 如何在蛇形规则中使用 bash for 循环
- python - heroku 电报机器人,BadRequest:Bad webhook:保留 IP 地址 0.0.0.0
- python - 如何在python中做一个堆栈图,按一个类别按百分比排序?
- html - 使用 Selenium Python 和选择器进行爬网
- javascript - React.js“useEffect”不定式循环