T-Digest

  • A new data structure for accurate on-line accumulation of rank-based statistics such as quantiles and trimmed means
  • 官方实现 https://github.com/tdunning/t-digest
  • 典型应用:统计分位数
  • 原理:使用一种一维Kmeans的变体,来产生一种允许精确分位数统计的数据结构

UDAF

spark中编写UDAF的4种姿势

  • spark3.0对udaf进行有优化

implement in spark

思路1:

  • 简单的udaf,一个buffer持续聚合同一个group的数据
  • 最后evaluate时候再调用T-Digest add,并计算
  • 评价:可能存在内存问题

思路2

  • 含有udt的udaf,即把TDigest对象包装进去,变成一种sparksql可以识别的类型
  • 新来一个数据,就add到buffer中的TDigest中,省内存
  • 最后evaluate时候只要再调用一下T-Digest获取结果就好了
  • 评价:

参考实现