Я разработал приведенное ниже решение с помощью ответов Йоге sh и Ламансы
val df1 = df.withColum("row_num", when($"category"==="Cat1", "A"),
.when($"category" ==== "Cat2", "B"),
.when($"category" === "Cat3", "C"))
df1.join(df1.groupBy("product_id).agg(first("category").as("category")),
Seq("product_id","category")).show
При использовании в качестве заказа по категориям невозможно убедиться, что ваши предпочтения будут в желаемом порядке. Например, Cat2 может быть первым предпочтением.
Output :
+----------+--------+-------+
|Product ID|Category| Status|
+----------+--------+-------+
| 1| Cat1|status1|
| 2| Cat1|status1|
| 3| Cat2|status1|
+----------+--------+-------+
Вывод: