PDA版 - 基站异常大数据问题和我的实施方案 (转载) |
|
|
|
|
|
j***e 发帖数: 1 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: SwiftDove (Swift Dove), 信区: Programming
标 题: 基站异常大数据问题和我的实施方案
发信站: BBS 未名空间站 (Sun Dec 16 16:39:28 2018, 美东)
多年前在这里看到了有多人提及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是另一个人做。
我本人是匹老马了。好在我的经理非常信任我:不管做成什么样子都不会不满意。我也
从这里和我们组里的年轻人那里得到了不少东西。我提到得那个年轻人在我们组时,我
们经理给了他不少荣誉 (评上公司优秀奖),以至于有一个老中对经理非常有意见。
其实, 大家大部分人只是做一个搬砖的工作,做好做坏做什么大多时候不是那么重要
的。 |
|
|
|
|
|