Найти минимум и максимум года и месяца в искровых скалах - PullRequest
0 голосов
/ 19 июня 2019

Я бы хотел найти минимум года и месяца и максимум года и месяца из фрейма искры.Ниже мой фрейм данных

code  year  month 
xx    2004  1
xx    2004  2
xxx   2004  3
xx    2004  6
xx    2011  12
xx    2018  10 

Я хочу, чтобы минимальные месяц и год были 2004-1, а максимальные месяц и год - 2018-10

. Решение, которое я пробовал,

  val minAnMaxYearAndMonth = dataSet.agg(min(Year),max(Month)).head()
val minYear = minAnMaxYearAndMonth(0)
val maxYear = minAnMaxYearAndMonth(1)
val minMonth = dataSet.select(Month).where(col(Year)  === minYear).take(1)
val maxMonth = dataSet.select(Month).where(col(Year)  === maxYear).take(1)

получение minYear и MaxYear, но не min и max Month.Пожалуйста, помогите

1 Ответ

0 голосов
/ 19 июня 2019

Вы можете использовать struct для создания кортежей по годам и месяцам, а затем полагаться на порядок кортежей.Кортежи в первую очередь заказываются самым левым компонентом, а затем используются следующие компоненты в качестве прерывателя связей.

df.select(struct("year", "month") as "ym")
  .agg(min("ym") as "min", max("ym") as "max")
  .selectExpr("stack(2, 'min', min.*, 'max', max.*) as (agg, year, month)")
  .show()

Выход:

+---+----+-----+
|agg|year|month|
+---+----+-----+
|min|2004|    1|
|max|2018|   10|
+---+----+-----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...