获取窗口上的总行数

Men*_*ijk 5 pyspark

在 PySpark 中,是否可以获得特定窗口中的总行数?

现在我正在使用:

w = Window.partitionBy("column_to_partition_by")

F.count(col("column_1")).over(w)
Run Code Online (Sandbox Code Playgroud)

但是,这只能提供增量行数。我需要的是该特定窗口分区中的总行数。谁能告诉我这个命令吗?

Shu*_*Shu 4

我认为你需要添加rowsBetween窗口条款。

Example:

df.show()
#+---+---+
#|  i|  j|
#+---+---+
#|  1|  a|
#|  1|  b|
#|  1|  c|
#|  2|  c|
#+---+---+

w = Window.partitionBy("i").rowsBetween(-sys.maxsize,sys.maxsize)

df.withColumn("count",count(col("j")).over(w)).show()
#+---+---+-----+
#|  i|  j|count|
#+---+---+-----+
#|  1|  a|    3|
#|  1|  b|    3|
#|  1|  c|    3|
#|  2|  c|    1|
#+---+---+-----+
Run Code Online (Sandbox Code Playgroud)

通常当我们有.orderByto 子句window时,我们需要rowsBetween添加 need ,因为 orderby 子句默认为unboundedPreceedingand currentRow

w = Window.partitionBy("i").orderBy("j")
df.withColumn("count",count(col("j")).over(w)).show()

#incremental count
#+---+---+-----+
#|  i|  j|count|
#+---+---+-----+
#|  1|  a|    1|
#|  1|  b|    2|
#|  1|  c|    3|
#|  2|  c|    1|
#+---+---+-----+
w = Window.partitionBy("i").orderBy("j").rowsBetween(-sys.maxsize,sys.maxsize)
df.withColumn("count",count(col("j")).over(w)).show()

#total number of rows count
#+---+---+-----+
#|  i|  j|count|
#+---+---+-----+
#|  1|  a|    3|
#|  1|  b|    3|
#|  1|  c|    3|
#|  2|  c|    1|
#+---+---+-----+
Run Code Online (Sandbox Code Playgroud)

  • 你是一个英雄。这正是我想要的,非常感谢。 (2认同)