【发布时间】:2018-07-29 01:34:57
【问题描述】:
假设我有这样的数据
| department | user | purchases |
|:-----------|------:|:---------:|
| sport | user1 | 1 |
| video | user1 | 7 |
| audio | user2 | 5 |
| book | user2 | 3 |
| sport | user2 | 8 |
等等。我需要像这样在每个类别中计算购买次数:
| department | users5 | users7 | users16 |
|:-----------|--------:|:-------:|:--------:|
| sport | 10 | 5 | 3 |
| video | 7 | 6 | 4 |
| audio | 3 | 1 | 0 |
| book | 5 | 1 | 0 |
users5 - 在该部门有
users7 - 在该部门进行 5 到 7 次购买的用户计数
users16 - 在该部门进行 7 到 16 次购买的用户计数
我可以通过以下方式实现目标:(spark sql伪代码)
val users5 = df.filter("purchases" < 5).groupby("category").agg(count("user"))
val users7 = df.filter("purchases" >= 5 AND "purchases" < 7).groupby("category").agg(count("user"))
val users16 = df.filter("purchases" >= 7 AND "purchases" < 16).groupby("category").agg(count("user"))
users5.join(users7, Seq("category"), "outer").join(users16, Seq("category"), "outer")
我的问题是有没有更通用的明确方法来做同样的工作? 我正在使用 apache spark 2.3
【问题讨论】:
-
你对sql语句还好吗?
标签: sql apache-spark apache-spark-sql