【发布时间】:2020-10-08 20:40:35
【问题描述】:
我在 spark 2.4.5 中有以下数据:
data = [
('1234', '203957', '2010', 'London', 'CHEM'),
('1234', '203957', '2010', 'London', 'BIOL'),
('1234', '288400', '2012', 'Berlin', 'MATH'),
('1234', '288400', '2012', 'Berlin', 'CHEM'),
]
d = spark.createDataFrame(data, ['auid', 'eid', 'year', 'city', 'subject'])
d.show()
+----+------+----+------+-------+
|auid| eid|year| city|subject|
+----+------+----+------+-------+
|1234|203957|2010|London| CHEM|
|1234|203957|2010|London| BIOL|
|1234|288400|2012|Berlin| MATH|
|1234|288400|2012|Berlin| CHEM|
+----+------+----+------+-------+
我需要从中获取按auid分组的df,并按城市的时间顺序排列,即另一列中的London, Berlin和[[Berlin, 2010], [London, 2012]],另外我需要按主题的降序频率列排序:[CHEM,2], [BIOL, 1], [MATH, 1]。或者就像[CHEM, BIOL, MATH]。
我试过了:
d.groupBy('auid').agg(func.collect_set(func.struct('city', 'year')).alias('city_set')).show(10, False)
这导致了:
+----+--------------------------------+
|auid|city_set |
+----+--------------------------------+
|1234|[[Berlin, 2012], [London, 2010]]|
+----+--------------------------------+
我在这里卡住了,需要帮助。 (不胜感激对city_set 中的值进行排序的提示)
【问题讨论】: