Spark: Mapgroup и сгладить массивы - PullRequest
0 голосов
/ 26 марта 2020

У меня есть набор данных следующей структуры

| year| id | data            |min_week|max_week||
|2017 | 1  |  [32,21,34]     |       1|       3||
|2017 | 2  | [132, 121, 134] |       1|       3||
|2018 | 1  |  [5, 3, 3,0,1]  |       1|       5||
|2018 | 2  | [15, 13, 13]    |       1|       3||

Я хочу, чтобы данные были уплощены после сортировки по годам, что-то вроде этого

| min_year|max_year| id |                    data|min_week|max_week||
|---------+--------+----+------------------------+--------+--------||
|     2017|    2018| 1  |  [32,21,34,5,3,3, 0, 1]|       1|       5||
|     2017|    2018| 2  |  [132,121,134,15,13,13]|       1|       3||

Я пытался следующее, но это не дает то, что я хочу

case class WeeklyData
  (id: Long,
   min_week: Int,
   max_week: Int,
   data: List[Int],
   year: Int
  )

val data = spark.read.parquet("s3://path")
                    .as[WeeklyData]
                    .groupByKey(k => (k.product_id, k.year))
                    .mapGroups(
                      (k, iter)  => {
                        val s = iter
                          .toList
                          .sortBy(_.year)
                          .flatMap(_.data)
                        s
                      }
                    )

1 Ответ

0 голосов
/ 26 марта 2020

На самом деле я понял, что я сгруппировал по id и году, и передал функцию сгруппированным данным. Мне нужно было просто сгруппировать по id и передать ему функцию

...