问题描述:
在ETL/卡片中进行去重计数的计算,若是常规开窗就会报错。
常规MYSQL去重函数:count(distinct(xxx)),但是基于此无法开窗。
产生原因:
在spark语法中不支持count(distinct(xxx))的开窗。
解决方法:
①去重计数:
size(collect_set([字段])over(partition by [分组列名]))
②计数(不去重):
size(collect_list([字段])over(partition by [分组列名]))
ps:从性能角度出发,使用窗口函数在卡片上做即席计算时,建议数据集行数不要超过1亿行;
回复(4)
开窗 是啥意思?
开窗函数用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,能够在同一行中同时返回基础行的列和聚合列。
太棒了~
谢谢~~能帮到你就好:)