当前在线人数7821
首页 - 博客首页 - 公司生活杂记 - 文章阅读 [博客首页] [首页]
基站异常大数据问题和我的实施方案
作者:SwiftDove
发表时间:2018-12-16
更新时间:2018-12-16
浏览:2657次
评论:0篇
地址:73.
::: 栏目 :::

多年前在这里看到了有多人提及Spark,就去看了看。后来就试一试组里的项目,经理比较支持。在那以后的几年里,我们有好几个项目用了Spark。曾经有个项目还得到SVP的赞许。那也是我提职为principal两三年艰难过程最后的了结 :经理早就帮忙,VP也点头了,可是上面卡的很死。老行业,半死不活的,也无可抱怨。其实,真的非常鸡肋,只加了5%的薪水。这个坛子还是很不错的,特别像dwong, teacherwei, guvest等等大牛始终给坛子常年做不少贡献。。。记得赵策写的特快,好虫特能博眼球,可是英雄气短,不在与众人为伍。

现在在家度假,闲来就再聊聊那个基站异常大数据问题。虽然做的有点辛苦,但觉得我的解决方案中有点“学术”的味道。在这里和大家分享一下,这基本上是我一个做的,其中不免很多疏漏和拙见,请大家手下留情,轻砸。

我曾提到我觉得我们主任把问题抽象得很好。。。很多人看了那组数据可能摸不着头脑,我最初也是如此。现在让我重述一下我们实际上想解决的问题: 我们每小时能收集到一亿多的一种geospatial数据点,在这一亿多中大约有几百万点是“坏点”。这些坏点也可能是正常的(就像产品有一定的次品率)。但是, 要是某个地方比其历史来突然持续出现很多坏点,我们估计这个地方的基站可能出问题了。我们的目的是找出这样的区域和基站。

我的方案是这样的:

1. 先把数据按小时分段。把当前小时的“坏点”拿出来分类,比较集中的地方出现问题的可能性比较大。

2. 把当前小时的“坏点”放在一起,这样实际上我们就只有平面这两个纬度了。这样分类容易一些,因为要把时间纬度放在一起,“距离”不好定义。

3. 用DBScan给“坏点”分类。这里也有不少坑。很多包对‘大’数据不行。最后, 选了https://elki-project.github.io/, 经过开发者的提示,用covertree index极大地提高了速度 – 几百万点用一个比较大的单机十几分钟就能完成(用Spark’s Client mode, 这部分在Edge node上完成)。最初一二十万的点也需要很多小时才能完成。 调DBScan的参数也是一个“艺术“。分类的结果得到大约3~4万的clusters。

4. 下一步要计算“坏点“率。怎么算呢?分母的点集怎么定义?这是个难点。我数学的基础可能对我有点帮助。。。前半生研究了十几年复杂的凸分析,结果用了一个最简单的部分。我用3)中每个类里的“坏点”产生一个凸包(convex-hull),这样就定义了一个含有这些“坏点”的区域。所有属于这个凸包的点就是分母了。在这上面也花了不少时间:有的凸包太大包含太多点。又试了好多凹包(concave-hull),这是一个没严格定义的东西。最后,实际上还有些太大的凸(凹)包,虽然我本人不太满意,但有几个人认为它本身有意义, 再分不一定好。

5. 要找到4)中的分母也不容易:有一亿点要判断它们是不是属于某个凸包。用了GeoSpark里的SQL,但这毕竟是1亿对4万的“Cross Join“, 非常昂贵, 做不出来。我试了一个小州的数据,倒是能算出来。可是即使把加州分成两三块,有时还是算不出来。做“Cross Join“时,也给每个凸包画个矩形,这样可以在lat,lng上做数值比较,好了不少但有时还是无法算出来。这个地方卡了我好久:给好多州划块,怎么实验有时总是卡。突然有一天,我脑洞大开:把那4万个凸包每相邻的(就简单按凸包中心做排序)100个分成一组,把这一百个凸包拼在一起,画个框,这样每次处理的数据大大地减少了。这样还真的就能做出来了。同时,这也避免了事先画框(像把一个州分块)把本来在一起的cluster给切开了。

6. 接下来的工作量还是很大:因为要比较历史做统计分析,还得把历史上得“坏点“率算出来(我们选过去13个周得每周的同一天同一个小时)。这又涉及二是几个” Cross Join“,但用5)最后的方法同样也做出来了。

7. 其它还有一些零碎工作,像找每个凸包里或附近的基站, 这涉及更多的“Cross Join“。我还帮助前端做了用Google maps 画出凸包(polygon),坏点分布和附近的基站等的prototype。Detail是另一个人做。


我本人是匹老马了。好在我的经理非常信任我:不管做成什么样子都不会不满意。我也从这里和我们组里的年轻人那里得到了不少东西。我提到得那个年轻人在我们组时,我们经理给了他不少荣誉 (评上公司优秀奖),以至于有一个老中对经理非常有意见。其实, 大家大部分人只是做一个搬砖的工作,做好做坏做什么大多时候不是那么重要的。


提示: 本博文来自于 Programming 版

[上一篇] [下一篇] [发表评论] [写信问候] [收藏] [举报] 
 
暂无评论
 
用户名: 密码:
发表评论
评论:
[返回顶部] [刷新]  [给SwiftDove写信]  [公司生活杂记首页] [博客首页] [BBS 未名空间站]
 
Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有BBS 未名空间站(mitbbs.com) since 1996