#sql #apache-spark #apache-spark-sql
#sql #apache-spark #apache-spark-sql
Вопрос:
У меня есть столбец colors
, в котором хранятся названия цветов, разделенные запятыми. В выходных данных мне нужно иметь строку, состоящую из разделенных запятыми различных названий цветов (сгруппированных по id
столбцам). Примечание: мне нужно иметь это в Spark SQL.
spark.sql("""
SELECT id, concat_ws(', ', sort_array( collect_set(colors))) as csv_colors
FROM (
VALUES ('A', 'green'),('A','yellow'),('A','yellow, green, blue'),('B', 'blue'),('B','green')
) as T (id, colors)
GROUP BY id
""").toPandas()
Что я получаю, так это:
id csv_colors
0 B blue, green
1 A green, yellow, yellow, green, blue
Что мне нужно, так это:
id csv_colors
0 B blue, green
1 A blue, green, yellow
Я был бы признателен за любые подсказки. Спасибо!
Ответ №1:
Сначала вы можете разделить и разделить цвета:
spark.sql("""
SELECT id, concat_ws(', ', sort_array(collect_set(colors))) as csv_colors
FROM (
SELECT id, explode(split(colors, ', ')) colors
FROM (
VALUES ('A', 'green'),('A','yellow'),('A','yellow, green, blue'),('B', 'blue'),('B','green')
) as T (id, colors)
)
GROUP BY id
""")
--- -------------------
| id| csv_colors|
--- -------------------
| B| blue, green|
| A|blue, green, yellow|
--- -------------------