【发布时间】:2019-11-07 21:02:12
【问题描述】:
我想创建一个表,其中每一行都是一个唯一的 ID,并且 Place and City 列包含一个人访问过的所有地方和城市,按访问日期排序,使用 Pyspark 或 Hive。
df.groupby("ID").agg(F.concat_ws("|",F.collect_list("Place")))
进行连接,但我无法按日期订购。此外,对于每一列,我都需要单独执行此步骤。
我也尝试过使用本文中提到的 windows 功能,(collect_list by preserving order based on another variable) 但它会引发错误:java.lang.UnsupportedOperationException: 'collect_list(') is not supported in a window operation。 我想:
1- 按照旅行日期的顺序对连接的列进行排序
2- 对多列执行此步骤
数据
| ID | Date | Place | City |
| 1 | 2017 | UK | Birm |
| 2 | 2014 | US | LA |
| 1 | 2018 | SIN | Sin |
| 1 | 2019 | MAL | KL |
| 2 | 2015 | US | SF |
| 3 | 2019 | UK | Lon |
预期
| ID | Place | City |
| 1 | UK,SIN,MAL | Birm,Sin,KL |
| 2 | US,US | LA,SF |
| 3 | UK | Lon |
【问题讨论】:
-
谢谢。第一种方案不能用于多列,使用windows函数的方案会报错:java.lang.UnsupportedOperationException: 'collect_list('Place) is not supported in a window operation。
-
您使用的是什么版本的 Spark?窗口函数不适用于太旧的版本(例如:stackoverflow.com/questions/46628459/…)。
标签: python apache-spark hive pyspark apache-spark-sql