Spark 2.2 dataframe [scala] - PullRequest
       25

Spark 2.2 dataframe [scala]

0 голосов
/ 17 января 2019
OrderNo    Status1    Status2     Status3
123    Completed      Pending     Pending
456    Rejected   Completed   Completed
789    Pending    In Progress     Completed

Вверху находится таблица, представляющая собой набор входных данных, а ожидаемый результат ниже. Подвох здесь в том, что мы должны рассчитывать на основе порядкового номера, а не количества событий. Можем ли мы сделать это с помощью искровых фреймов данных, используя scala? Заранее благодарю за помощь.

Pending     2
Rejected    1
Completed   3
In Progress 2

1 Ответ

0 голосов
/ 17 января 2019

Вы можете попробовать следующий код. Он подсчитывает количество отдельных 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| +-----------+------------+

...