2

我需要 partitionBy 以便在timeandmatch_instatid列中获得不同的值,但它只在大约一半的时间内产生不同的值

window_match_time_priority = Window.partitionBy(col("match_instatid"),col("time")).orderBy(col("match_instatid"),col("time"), priority_udf(col("type")).desc())
with_owner = match.select('match_instatid', "time", "type",
                F.last(col("team_instatid")).over(window_match_time_priority).alias('last_team'),                                                                   
                   F.last(col("type")).over(window_match_time_priority).alias('last_action')) \
                   .withColumn("owner", owner_assignment_udf(col("last_team"), col("last_action")))

您可以看到 last_action 列仅针对某些具有相同时间的行重复,但应该针对所有行。每个唯一时间值的 owner 和 last_action 应该只有一个值

partitionedBy 数据框的图片

4

1 回答 1

1

试试这个作为窗口。要使 F.last 工作,窗口必须是无界的。F.first 可以不受限制地工作。

window_match_time_priority = Window.partitionBy(col("match_instatid"),col("time")).orderBy(col("match_instatid"),col("time"), priority_udf(col("type")).desc())\
.rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
于 2020-02-21T18:08:03.710 回答