У меня есть следующий DataFrame df
:
Id label field1 field2
1 xxx 2 3
1 yyy 1 5
2 aaa 0 10
1 zzz 2 6
Для каждого уникального Id
Я хочу знать label
с самыми высокими field1
и field2
.
Ожидаемый результат:
Id labelField1 lableLield2
1 xxx zzz
2 aaa aaa
Я знаю, как это сделать, если бы у меня было только labelField1
или labelField2
.Но я не уверен, как лучше всего работать с обоими лейблами.
val w1 = Window.partitionBy($"Id").orderBy($"field1".desc)
val w2 = Window.partitionBy($"Id").orderBy($"field2".desc)
val myLabels = df.select("Id", "label", "field1", "field2")
.withColumn("rn", row_number.over(w1)).where($"rn" === 1)
.drop("rn")
.drop("field1")