【发布时间】:2023-02-14 13:21:17
【问题描述】:
对于每个客户 ID,我需要使用 spark / pyspark 找出第一个航班来源和最后一个航班目的地
cid --> customerId
fid --> 航班 ID -- 它是随机的
输入数据帧:
| cid | fid | origin | destination |
|---|---|---|---|
| 1 | f12 | texas | newyork |
| 1 | f21 | newyork | delhi |
| 1 | f08 | delhi | japan |
德州 -> 纽约 -> 日本
输出数据帧:
| cid | origin | destination |
|---|---|---|
| 1 | texas | japan |
我尝试用连接来做,但不确定如何在连接后合并结果集以仅过滤起始航班源和最后航班目的地
【问题讨论】:
-
谢谢@RonakJain。这很有帮助。我在考虑数据帧非常大的情况。不收集列表 (F.collect_list("origin") 会减慢查询速度。
-
collect_list 的性能影响与任何 groupBy 操作一样好,因为我们会将客户的所有航班带到一个地方。如果您的数据框已经以这种方式分区 - 就不会有问题。 collect_list 类似于字符串连接,而不是 collectAsList()
-
df.groupBy("cid") -- 任何聚合帖子都将具有类似的性能。
标签: apache-spark pyspark apache-spark-sql