在 PySpark 中,是否可以获得特定窗口中的总行数?
现在我正在使用:
w = Window.partitionBy("column_to_partition_by")
F.count(col("column_1")).over(w)
Run Code Online (Sandbox Code Playgroud)
但是,这只能提供增量行数。我需要的是该特定窗口分区中的总行数。谁能告诉我这个命令吗?
我认为你需要添加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)
| 归档时间: |
|
| 查看次数: |
8605 次 |
| 最近记录: |