Windows函数上的PySpark计数

p5cysglq  于 2023-02-05  发布在  Apache
关注(0)|答案(2)|浏览(119)

我有一个功能让我抓狂,我应该只使用PySpark。
下表是数据的表示:

有身份证,姓名,姓氏和有效性,我可以分区,但我应该点燃的电子邮件的百分比值是正确设置的身份证。
如下图所示:

我怎样才能解决这个问题?

window = Window.partitionBy("ID", "email", "name", "surname", "validity").orderBy(col("ID").desc())

df = df.withColumn("row_num", row_number().over(window))

df_new = df.withColumn("total valid emails per ID", df.select("validity").where(df.validity == "valid" & df.row_num == 1)).count()
k10s72fa

k10s72fa1#

比如:

win = Window.partitionBy("ID", "email", "name", "surname")

df = df.withColumn(
    "pct_valid",
    F.sum(F.when(F.col("validity") == "Valid", 1).otherwise(0)).over(win)
    / F.col("total emails"),
)
c2e8gylq

c2e8gylq2#

这是可行的:

df.withColumn("ValidAsNumber", F.when(F.col("Validity") == "Valid", 1).otherwise(0))\
  .withColumn("TotalValid", F.sum("ValidAsNumber").over(Window.partitionBy("ID")))\
  .withColumn("PercentValid", F.expr("(TotalValid/TotalEmails)*100")).show()

输入:

输出(我保留了中间列以便于理解,您可以删除它们):

相关问题