如何在Azure Data Flows的聚合转换中计算中位数?
在Azure Data Flows中实现中位数计算
Azure Data Flows的聚合转换确实没有内置中位数函数,你可以通过以下两种实用方法实现:
方法一:窗口转换+筛选+聚合组合实现
这是最易理解的分步实现方式:
- 给数据流添加窗口转换,按需设置分组键(无需分组就留空)。
- 在窗口的排序规则里,对需要计算中位数的数值列设置升序/降序排序。
- 添加两个窗口计算列:
- 统计分组内总行数:
count(1),命名为total_rows - 标记每行在排序后的位置:
row_number(),命名为row_pos
- 统计分组内总行数:
- 接一个筛选转换,根据总行数奇偶性设置筛选条件:
- 奇数行:
row_pos == (total_rows + 1)/2 - 偶数行(取中间两数的平均值):
row_pos == total_rows/2 OR row_pos == total_rows/2 + 1
- 奇数行:
- 最后用聚合转换,保留原分组键(如果有),对筛选后的数值列取平均值(偶数场景)或直接取值(奇数场景),得到最终中位数。
方法二:直接使用百分位函数
Azure Data Flows支持percentile_cont和percentile_disc两个百分位函数,可直接在聚合转换中使用:
- 连续型中位数(偶数行自动取中间两数的平均值):
percentile_cont(0.5) within group (order by your_numeric_column) - 离散型中位数(返回数据集中存在的中间位置实际值):
percentile_disc(0.5) within group (order by your_numeric_column)
替换your_numeric_column为你要计算的数值列名,直接把这段表达式作为聚合列的计算逻辑即可。
小提示:
percentile_cont适合连续数值场景,percentile_disc更适合离散分类数值的中位数计算。
内容的提问来源于stack exchange,提问作者Vinodh M
相关产品推荐
相关产品推荐

