数据集包含有每日记录的产品,但有时它会丢失,所以我想创建额外的列来显示它在过去几天中是否存在
我有以下情况
创建t-1、t-2等列并用下面的内容填充
如果记录存在,则用1填充t-1,否则为零
原始表格:
Item Cat DateTime Value
A C1 1-1-2021 10
A C1 2-1-2021 10
A C1 3-1-2021 10
A C1 4-1-2021 10
A C1 5-1-2021 10
A C1 6-1-2021 10
B C1 1-1-2021 20
B C1 4-1-2021 20
预期结果:
Item Cat DateTime Value T-1 T-2 T-3 T-4 T-5
A C1 1-1-2021 10 0 0 0 0 0
A C1 2-1-2021 10 1 0 0 0 0 (T-1 is 1 as we have 1-1-2021 record)
A C1 3-1-2021 10 1 1 0 0 0
A C1 4-1-2021 10 1 1 1 0 0
A C1 5-1-2021 10 1 1 1 1 0
A C1 6-1-2021 10 1 1 1 1 1
B C1 1-1-2021 20 0 0 0 0 0
B C1 2-1-2021 0 1 0 0 0 0 (2-1-2021 record need to be created with value zero since we miss this from original data-set, plus T-1 is 1 as we have this record from original data-set)
B C1 3-1-2021 0 0 1 0 0 0
B C1 4-1-2021 20 0 0 1 0 0
B C1 5-1-2021 0 1 0 0 1 0
1条答案
按热度按时间y3bcpkx11#
假设原始表数据存储在
original_data
,我们可以使用名为sparksql的
daily_records
生成可能的日期。这是通过从数据集中识别最小和最大日期之间的天数来完成的,然后使用表生成函数生成可能的日期explode
以及spaces
生成所有可能的item
,date
记录将这些记录与实际数据连接起来,就有了一个包含值的完整数据集
使用sparksql查询视图,并使用左连接和
CASE
声明实际
SQL
生成:注意。
to_date
是可选的,如果DateTime
已格式化为date
字段或格式yyyy-mm-dd