首页 > 解决方案 > 在 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")

标签: pythonapache-sparkpyspark

解决方案


您可以使用窗口函数进行计数,即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|
+---+----------+-----+

推荐阅读