SQL-запрос Spark Group По значению, за которым следует список - PullRequest
0 голосов
/ 23 ноября 2018

Имеем таблицу (Data), как показано ниже:

color status  freq

red    y        1

blue   y        1

green   y       2

Ожидаемый результат: red,blue 1 green 2

select color , freq from  data where status = 'y' group by(freq)

Теперь мы хотим получить результат как 'red,blue' дляfreq= 1 и green для freq =2 как получить список цветов группы по частоте, исправить приведенный выше SQL-запрос.

при использовании first(colour), он возвращает только первый цвет, но ожидает все цвета группыпо частоте

исправить запрос SQL согласно выводу

1 Ответ

0 голосов
/ 24 ноября 2018

Попробуйте это:

import org.apache.spark.sql.functions._
import spark.implicits._
//import org.apache.spark.sql._
//import org.apache.spark.sql.types._ 

val df = Seq(
 ("green","y", 4),
 ("blue","n", 7),
 ("red","y", 7),
 ("yellow","y", 7),
 ("cyan","y", 7)
          ).toDF("colour", "status", "freq")

val df2 = df.where("status = 'y'") 
            .select($"freq", $"colour")
            .groupBy("freq")
            .agg(collect_list($"colour"))

df2.show(false)

возвращает:

+----+--------------------+
|freq|collect_list(colour)|
+----+--------------------+
|4   |[green]             |
|7   |[red, yellow, cyan] |
+----+--------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...