python - 在 pyspark 中获取不同的行数
问题描述
我在pyspark中有以下数据框。我想检查每一行是否是数据框中的唯一值。
下面是数据框。
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
import pyspark.sql.functions as F
data=[["1","2020-02-01"],["2","2019-03-01"],["3","2021-03-01"],["4",""],["5","2021-21-01"],["6","1900-01-01"],["6","2000-01-01"]]
df=spark.createDataFrame(data,["id","input"])
df.show()
ID | 输入 |
---|---|
1 | 2020-02-01 |
2 | 2020-02-01 |
3 | 2019-03-01 |
4 | |
5 | 2021-21-01 |
6 | 1900-01-01 |
6 | 2000-01-01 |
我正在寻找行数以查找该行是否唯一。下面是我正在寻找的输出。
ID | CountUnique |
---|---|
1 | 1 |
2 | 1 |
3 | 1 |
4 | 1 |
5 | 1 |
6 | 2 |
6 | 2 |
下面的代码将通过分组给我计数,但是我需要显示每一行的计数。例如 6 应该显示两次,行数为 2。
df.groupBy("id").count().orderBy("id").show().select("id")
解决方案
您可以使用窗口函数进行计数,即count(*) over (partition by id)
:
df.withColumn('count', F.expr('count(*) over (partition by id)')).show()
+---+----------+-----+
| id| input|count|
+---+----------+-----+
| 3|2021-03-01| 1|
| 5|2021-21-01| 1|
| 6|1900-01-01| 2|
| 6|2000-01-01| 2|
| 1|2020-02-01| 1|
| 4| | 1|
| 2|2019-03-01| 1|
+---+----------+-----+
推荐阅读
- python - 打开用空格分隔符保存为逗号分隔符的 CSV 文件
- python-3.x - 如何从图中选择合适的节点样本大小
- jwt - 错误:EVP_PKEY_sign_init:此键类型不支持操作
- node.js - npm list -g 显示我没有安装的包
- sql - SQL 计算不同的匹配值
- python-3.x - 无法选择下拉菜单
- reactjs - WebPack SyntaxError Unexpected token, expected "," [object Object]
- performance - 在 Jmeter 中如何找到 1k/2k 并发用户的响应时间,以及 1k 和 2k 用户的 Ram-Up 时间
- javascript - 铯如何使用路径位置绘制折线
- html - 从选择选项中选择 HTML 突然消失