У меня есть следующий DataSet
со следующей структурой.
case class Person(age: Int, gender: String, salary: Double)
Я хочу определить среднюю зарплату по gender
и age
, поэтому я группирую DS
по обоим ключам. Я столкнулся с двумя основными проблемами: во-первых, оба ключа смешаны в одном, но я хочу сохранить их в двух разных столбцах, во-вторых, столбец aggregated
получает глупое длинное имя, и я не могу понять как его переименовать (видимо as
и alias
не подойдут) все это через DS API
.
val df = sc.parallelize(List(Person(100000.00, "male", 27),
Person(120000.00, "male", 27),
Person(95000, "male", 26),
Person(89000, "female", 31),
Person(250000, "female", 51),
Person(120000, "female", 51)
)).toDF.as[Person]
df.groupByKey(p => (p.gender, p.age)).agg(typed.avg(_.salary)).show()
+-----------+------------------------------------------------------------------------------------------------+
| key| TypedAverage(line2503618a50834b67a4b132d1b8d2310b12.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$Person)|
+-----------+------------------------------------------------------------------------------------------------+
|[female,31]| 89000.0...
|[female,51]| 185000.0...
| [male,27]| 110000.0...
| [male,26]| 95000.0...
+-----------+------------------------------------------------------------------------------------------------+