我想从spark数据框中找到年份和月份的最小值和年份和月份的最大值。下面是我的数据框
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。请帮助
答案 0 :(得分:0)
您可以使用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|
+---+----+-----+