对于信号数据集中的每个constexpr
,找到最旧和最新的entity_id
的{{1}}。
在某些情况下,它可能是同一项目。如果有两个具有相同item_id
的不同项目,则取较低month_id
的项目。
最后将每个实体的信号计数求和,并输出为month_id
。正确的输出应在每个唯一的item_id
中包含1行。
输入:
total_signals
输出:
entity_id
如何使用窗口功能超前和滞后的特定entity_id: long
item_id: integer
source: integer
month_id: integer
signal_count: integer
列?
输入:
输出:
使用Scala API和Spark数据框
答案 0 :(得分:0)
您不会为此使用lead()
和lag()
。您将使用聚合。在这种情况下,您还需要一些条件聚合。
这可能是最好的方法:
select t.entity_id, t.num_signals,
tmin.item_id as item_id_min_month,
tmax.item_id as item_id_max_month
from (select t.entity_id, sum(signal_count) as num_signals,
min(month_id) as min_month_id,
max(month_id) as max_month_id
from t
) t join
t tmin
on tmin.entity_id = t.entity_id and
tmin.month_id = t.min_month_id join
t tmax
on tmax.entity_id = t.entity_id and
tmax.month_id = t.max_month_id ;
如果您的SparkSQL版本中提供了first_value()
和last_value()
,您也可以使用它们。