Вы можете попробовать следующий код. Он подсчитывает количество отдельных OrderNo для всех статусов. Надеюсь, это поможет.
val rawDF = Seq(
("123", "Completed", "Pending", "Pending"),
("456", "Rejected", "Completed", "Completed"),
("789", "Pending", "In Progress", "Completed")
).toDF("OrderNo", "Status1", "Status2", "Status3")
val newDF = rawDF.withColumn("All_Status", array($"Status1", $"Status2", $"Status3"))
.withColumn("Status", explode($"All_Status"))
.groupBy("Status").agg(size(collect_set($"OrderNo")).as("DistOrderCnt"))
Вот результаты. (Примечание. В ходе выполнения отображается только один раз в данных теста.)
+-----------+------------+
| Status|DistOrderCnt|
+-----------+------------+
| Completed| 3|
|In Progress| 1|
| Pending| 2|
| Rejected| 1|
+-----------+------------+