这是我当前的数据集:
from pyspark.sql import Window
import pyspark.sql.functions as psf
df = spark.createDataFrame([("2","1",1),
("3","2",2)],
schema = StructType([StructField("Data", StringType()),
StructField("Source",StringType()),
StructField("Date", IntegerType())]))
display(df.withColumn("Result",psf.collect_set("Data").over(Window.partitionBy("Source").orderBy("Date"))))
输出:
为什么在 ordered
的 Window 上使用 collect_set 函数时,Result
列的第一行中缺少值 3
?
我也尝试过使用 collect_list
,但得到的结果相同。
我想要的输出是:
保留 Result
中值的顺序 - 第一个是 Date = 1
,第二个是 Date = 2
最佳答案
您需要使用带有 unboundedPreceding
和 Window.unboundedFollowing
的窗口:
Window.partitionBy("Source").orderBy("Date") \
.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
当您有 orderBy
rowsBetween(Window.unboundedPreceding, Window.currentRow)
关于apache-spark - 订购 Pyspark 窗口时缺少数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70591443/