PySpark: PartitionBy оставляет одно и то же значение в столбце, на которое разбивается несколько раз - PullRequest
1 голос
/ 20 февраля 2020

Мне нужно partitionBy для того, чтобы получить разные значения в столбцах time и match_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 дублируется только для некоторых строк с одинаковым временем, но должен быть для всех. Должно быть только одно значение для владельца и last_action для уникального значения времени

Picture of partitionedBy dataframe

1 Ответ

0 голосов
/ 21 февраля 2020

Попробуйте это как окно. Для работы 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)
...