Точный ответ на ваш вопрос, который масштабируется:
df.dropDuplicates(include your key cols here = ID in this case).
Оконная функция перемешивает данные, но если у вас есть повторяющиеся записи и вы хотите выбрать, какой из них оставить, например, или хотите суммировать значение из дубликатов, тогда оконная функция - это путь к go
w = Window.PartitionBy('id')
df.agg(first( value col ).over(w)) #you can use max, min, sum, first, last depending on how you want to treat duplicates
Интересная третья возможность, если вы хотите сохранить значения дубликатов (для записи), приведена ниже до
df.withColumn('dup_values', collect(value_col).over(w))
это создаст дополнительный столбец с массивом на строку, чтобы сохранить повторяющиеся значения после того, как вы избавились от строк