【发布时间】:2017-08-17 18:15:18
【问题描述】:
我正在尝试计算“司机在特定日期赚取的出租车费”的总和。最初在 Netezza 上测试,现在尝试在 spark-sql 上编写代码。
但是,如果对于结构为 ((driver,day) --> fare) 的两行,如果 'fare' 值是相同,则 running_total 列始终显示 最终总和 !如果所有票价 不同 ,则计算得非常完美。有没有办法在不使用 rowsBetween(start,end) 的情况下实现这一点(在 ANSI SQL 或 Spark 数据帧中)?
样本数据:
driver_id<<<<>>>>date_id <<<<>>>>fare
10001 2017-07-27 500
10001 2017-07-27 500
10001 2017-07-30 500
10001 2017-07-30 1500
我触发的 SQL 查询来计算运行总计
select driver_id, date_id, fare ,
sum(fare)
over(partition by date_id,driver_id
order by date_id,fare )
as run_tot_fare
from trip_info
order by 2
结果:
driver_id <<<<>>>> date_id <<<<>>>> fare <<<<>>>> run_tot_fare
10001 2017-07-27 500 1000 --**Showing Final Total expecting 500**
10001 2017-07-27 500 1000
10001 2017-07-30 500 500 --**No problem here**
10001 2017-07-30 1500 2000
如果有人可以告诉我,我做错了什么,如果不使用 Rows Unbounded Precedings/rowsBetween(b,e) 可以实现,那么我非常感谢。提前致谢。
【问题讨论】:
-
你能用
range between unbounded preceding and current row吗? -
@gordon linoff 1. 理想情况下,我想避免这种情况,因为当我尝试时,spark-job 的速度几乎慢了 5 倍。另外请告诉我如何在 sql/spark-sql 中做到这一点。谢谢。
标签: sql apache-spark-sql pyspark-sql