窗口上pyspark Dataframe 中的行数

uinbv5nw  于 2023-08-02  发布在  Spark
关注(0)|答案(1)|浏览(110)

我有一个pyspark dataframe下面的数据
[

我的代码:

W = Window.partitionBy("A").orderBy(col("C"))
main_df = main_df.withColumn("cnt", F.count("B").over(W))

字符串
我使用count函数的方式有什么问题吗?如何使列“Actual”中的值与“Expecting”匹配?我看到我的输出有两个问题-
1.计数器从1开始,而它应该从0开始
1.对于每个组,最后一个计数被分配,而不是第一个
有人能帮我解决这个问题吗?

zujrkrfu

zujrkrfu1#

尝试用dense_rank窗口函数和substract 1dense_rank值。

Example:

df = spark.createDataFrame([('0','king','4/30/2022'),('1','king','5/17/2022'),('2','king','5/26/2022'),('3','king','6/5/2022'),('4','king','7/8/2022'),('5','king','7/9/2022'),('6','king','4/21/2023'),('7','king','4/21/2023'),('8','king','4/22/2023'),('9','king','8/22/2023')],['#','A','C'])
W = Window.partitionBy("A").orderBy(col("C"))

df.withColumn("c",to_date(col("C"),"M/dd/yyyy")).\
  withColumn("Expecting",dense_rank().over(W)-1).show()
#+---+----+----------+---------+
#|  #|   A|         c|Expecting|
#+---+----+----------+---------+
#|  0|king|2022-04-30|        0|
#|  1|king|2022-05-17|        1|
#|  2|king|2022-05-26|        2|
#|  3|king|2022-06-05|        3|
#|  4|king|2022-07-08|        4|
#|  5|king|2022-07-09|        5|
#|  6|king|2023-04-21|        6|
#|  7|king|2023-04-21|        6|
#|  8|king|2023-04-22|        7|
#|  9|king|2023-08-22|        8|
#+---+----+----------+---------+

字符串

相关问题