ComputeColStats UDF中 近似算法的介绍(续)
在前一篇文章的最后提到,对于准确率的提升是后续需要做的事情之一。接下来看看对于提升准确率,还有哪些事情可以做。
一,回顾
首先回顾下前一篇文章最后得到的结果,如下:
执行时间先忽略,只看准确率。对于上面8个字段,有些在sample为25(采样比例1/25)的情况下还是相当准确的,比如odps_task_type,start_time;而有些则存在一定差距,比如project_name,fuxi_ceil_mem等;还有些存在比较大的差距,比如odps_inst_id,fuxi_avg_cpu。同样的采样算法,同样的估计算法,对于不同的数据会得到截然不同的结果。这种差异相信决大部分来自于数据本身。
下面就从数据本身来看下到底差异是如何出现的。
二,数据差异
不同的字段存储的数据不同,不同数据可能会存在唯一值上的差异。比如说对于主键,比如说对于纬度直,两者肯定在DistinctValue的分布上肯定是完全不同的。
1,如果该字段为主键,那么RowCount(X轴)和DistinctValue(Y轴)关系类似下图:
这是一条斜率为1的直线。
对于这种情况,目前的算法肯定可以非常准确的估算出DistinctValue值。
2,如果该字段为纬度值(唯一值非常少),那么RowCount(X轴)和DistinctValue(Y轴)关系类似下图:
随着RowCount的增加,DistinctValue也在增加,但到了某个点后DistinctValue基本保持不变。
3,如果该字段为一般字段,随着RowCount的增加而DistinctValue也缓慢增加,类似下图:
三,数据差异导致的DistinctValue的计算误差?
上面一部分列举了三种可能的RowCount和DistinctValue关系。第一种类型是比较简单的,也能很准确的估算出DistinctValue值。而对于第二种和第三种则要困难的多,从测试的结果来看是这样的。
我们采样的前提是,采样算法能保证采样是随机的,每条数据被访问的几率是相同的。但实际上这样的前提是不存在的。这也是目前对第三种的估算也可能存在较大差异的原因。因为按道理来说,其实第三种我们也应该能很好的预估才对。目前的采样算法并不是随机的,数据本身分布对采样的结果影响极大。为了性能和实现起来简单,目前采样的算法是隔n条取1条的方式实现的,并不是真正意义上的随机采样。
针对同一次估算过程,我尝试过不同的拟合回归算法,结果并没有特别的不同,问题并不是在算法上,而是在数据本身上。下面通过对存在较大误差的fuxi_avg_cpu来看下,不同的采样比例下的RowCount和DistinctValue关系的差异。
上面几张图对下对比,能看得出来在不同的采样比例下图形的状态会有很大的变化。差异这么大的话想要比较准确的预估显然是不太现实的。
四,总结
目前看来DistinctValue估算的差异大部分原因是因为采样,想要提高准确率增加采样比例就可以了。而具体回归的算法,则没那么重要了。
ComputeColStats UDF中 近似算法的介绍(续)相关推荐
- [转]C#中的委托和事件(续)
源码下载:http://www.tracefact.net/SourceCode/MoreDelegate.rar C#中的委托和事件(续) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托 ...
- java中ThreadPool的介绍和使用
文章目录 Thread Pool简介 Executors, Executor 和 ExecutorService ThreadPoolExecutor ScheduledThreadPoolExecu ...
- Fluent UDF中调用Matlab矩阵运算函数(以二维插值为例)
Fluent UDF中经常需要用到一些常见算法,例如插值.拟合.矩阵运算等等,这些在UDF中是没有现成函数实现的,理论上需要我们自己去写函数.另一方面我们又注意到这些运算恰恰是Matlab的强项,几乎 ...
- HTML中Css详细介绍
HTML中Css详细介绍 一.样式表的作用 1.Css样式表,层叠样式表 2.类似于人类的衣服,网页的衣服 3.作用:美化网页 4.优势: 1.内容与表现分离,便于维护 2.样式丰富,页面布局灵活 3 ...
- Linux下使用ls查看文件颜色全部为白色的解决方法,以及Linux中文件颜色介绍
1 解决ls查看文件爱呢颜色为白色 方法一: 1.修改~/.bashrc文件,添加如下内容 alias ls='ls --color=auto' 2.source一下,让修改配置生效 source ~ ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- c语言字符串加减_C语言中指针的介绍
C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...
- Linux中 /boot 目录介绍 【转载】
Linux中 /boot 目录介绍 转自:点击打开链接 一./boot/目录中的文件和目录 Linux系统在本地启动时,目录/boot/非常重要,其中的文件和目录有: (1)系统Kernel的配置文件 ...
- 6.支持向量机(SVM)、什么是SVM、支持向量机基本原理与思想、基本原理、课程中关于SVM介绍
6.支持向量机(SVM) 6.1.什么是SVM 6.2.支持向量机基本原理与思想 6.2.1.支持向量机 6.2.2.基本原理 6.3.课程中关于SVM介绍 6.支持向量机(SVM) 6.1.什么是S ...
最新文章
- c# 5.0入门经典笔记
- echarts formatter_vue使用echarts的方法
- python基础——Linux系统下的文件目录结构
- windows的\r\n与Linux的\n
- NopCommerce 2.5的部署
- 喝咖啡的好处和坏处及注意事项
- join有哪几种方式?内外连接有什么区别?
- Android开发通知栏的那些事
- 连接数据库出现错误代码为18456
- 实验:树莓派通过网线连接笔记本实现网络共享
- excel2003打开后找不到工作表
- 宝塔 云服务器 外网无法访问 解决办法
- 标准ACL,扩展ACL
- [附源码]JAVA+ssm计算机毕业设计高校体育馆管理信息系统(程序+Lw)
- XGBoost:参数解释
- php连接mysql错误:Call to undefined function mysql_connect()
- 桌面破坏王游戏开发学习笔记总结
- html量子效果,HTML5 量子谐振子动画模拟
- 让 AirDrop 支持有线传输,甚至让不支持 AirDrop 的 Mac 也能使用该功能 黑苹果也可以的哦
- 利用ubuntu对SD卡分区,生成EXT3、EXT4分区