算是前言吧
之前断断续续,用Spark MLlib 做了将近两个月的数据挖掘,记录点东西。
数据挖掘是有目的的,Spark只是工具
在数据挖掘操作前,需要明确,通过这些计算,你希望从这一堆数据中获取到什么。不然只是每个算法跑一遍,也只能证明你调用Spark API 的能力合格了。
在最开始的时候,进入了一个误区,以为社区炒的火热的Spark是全知全能的。数据挖掘什么的,Spark就能搞定了。然而,Spark毕竟只是一个工具,使用工具归根结底还是人。最开始,只是想掌握Spark这种技术而已,从而忽视了数据挖掘的目的(当然,这也和团队构成有关,一个产品经理加我一个研发,总觉得和业务相关的事由产品经理去实现就行。。。 图样图森破啊 )
将Spark MLlib 中的算法能跑的都跑了一遍,得到了许多自己根本不知道意义的数据,才发现,其实做了无用功。
数据可视化很重要
看到这个需求的时候,第一反应是找相应的工具。的确有很多数据可视化的工具,画出来的图非常炫。但是,这些工具大部分真的只是画图的工具,需要你将数据整理好输入进去,然后展现出来。然而我需要的则是能够做一些简单汇总计算的操作。于是试过了echarts 、plotyly.js 、R 等等,居然发现是Excel 用的最顺手。然而Excel 却难以处理如此庞大的数据只能进行切割。下一步是该好好学学python了,考虑直接用python on Spark 进行计算,然后对结果画图,这样应该会简单很多。
不要随便造轮子
用Spark用了几天,然后被zb推荐用了weka,方才恍然,TMD世界上怎么有真么方便的工具啊,还要Spark MLlib 干蛋啊。各种算法都整合好,数据处理又方便,还能出简单的图,简直完美。
知己知彼
接上,既然weka这么完美,那为何还要用Spark呢?归根结底,还是数据量太大,只能使用Spark。这也是Spark的优势所在。即便这个玩意,对机器配置要求高,容易OOM,GC一团乱码,还不稳定。然而做离线的机器学习处理,以上这些劣势who care?只要它够快,处理的数据够大,能出结果就行了。没有工具是万能的,只要他能满足你的需求他就是个好工具。
MLlib VS ML
诚然,一开始想上ML的。封装程度更高的API,简洁的Pipeline,一切都是那么美好。然而数据却不是那么美好。很多源数据的清洗没法用SparkSQL 或者 Hive进行。(好吧 我承认我很水,SQL 只是刚会用而已)于是采用了MLlib。
因为数据是存在Hive表里的,思路就如下:
SparkSQL 取数据 ->RDD (进行清洗)->MLlib (进行挖掘) ->python (可视化)
讲故事很重要
说实话,最后计算出来的数据,其实我是看不懂的,还好zb厉害,能够给出各种合理的解释,然后按照相应的方向进行深挖。