如何理解大数据?
最头疼的应该就是大数据实在是太大了吧。数据就像一个重达几百斤的沙发,你在家里想给它随便挪个角度都得耗尽体力。
最常见的就是拿SQL在常规数据库上搞几个简单数据操作,结果系统磨蹭了半天最后报错,spool space不足,一看一不小心就拉了几百亿行的数据出来。最后只能按日期分段,一个个来,最后再拼在一起。
在Hadoop上用Hive也好不到哪去,一个select语句动辄一个半天过去了还没任何下文,报错是不报错了,提取数据的速度奇慢。随便做一点微小的工作就能等出一个上午的时间。
总之只要数据的量太大了,效率就低得让人难以忍受,仅仅给自己的query debug再测试一下,都可能耗去一整天。
上面应付的还仅仅只是量大的问题(size大),等到数据总算清理好准备好了,你终于可以大显身手开始建模分析了,数据规模过大(scale大)又经常成为更令人头疼的问题。比如你手头有一百多个自变量,需要做预测/分类,你想搞个variable/model selection找出最好的一个模型,结果变量组合可以轻易突破 [图片上传失败...(image-6d5b1c-1580787310245)]
的规模,不管你是想随便算个MSE, MAPE之类的指标比较一下,还是想搞个cross validation做稳妥的选择, 啥都别玩了,先想办法降维吧,要么就是退而求其次用stepwise这种类似于greedy search的局部最优算法来寻找,牺牲性能/精度来换取时间上的可行性。
又比如做时间序列的预测,一次性要给几十万个数据列各自fit十几个模型,最后给每个数据列各自挑出最好的模型,没有什么降维和stepwise这么一说,我想尽办法优化参数和代码,结果还是三天三夜都跑不出来,完全没法用,最后只能上GPU计算或者并行计算,我本来只想简单做个预测的,涉及到数据规模过大的问题,故事就复杂了。
还有个类似前面提到的variable selection的例子就是做线性/整数规划的优化,经常碰到各种精确解法都不可用的情形,又因为变量太多,变量取值空间太大,用暴力穷举法能算到天荒地老,最后只能编个启发式算法找个次优解,往往解出来的效果都差强人意,勉强堪用。这应该也属于广义的大数据应用中的一种情形。
实际中,大数据太大,不管是size大还是scale大,机器应付大数据的能力都经常会不够,这就是最让人头疼的地方。