大数据现在是个很宽泛的职业方向了。广义的大数据在工业界分为:
-
基础架构。这个岗位主要为大数据提供底层的存储、基础设施等,要求是熟悉Hadoop、Spark等分布式集群。
-
数据仓库。这个岗位和业务紧密挂钩,主要做的工作是深入了解业务,设计出业务扩展性好的数据仓库。要求是会写SQL、懂数据仓库设计。
-
数据分析/数据挖掘/算法开发。这类岗位属于大数据的应用,真正把数据转化为生产力的工作。
这三类岗位的依赖关系是3->2->1。
我们一般说的大数据方向应该是指3.数据分析/数据挖掘/算法开发。这个岗位不但要学习本岗位要求的知识和技能,也必须了解岗位1、2的技术。比如说,你参与做一个推荐系统,那么你要获取数据,简单分析数据需要用Sql(一般是HiveQL),再复杂点的逻辑得写MR (MapReduce程序,下同)或者Spark程序,更复杂的逻辑或者场景,无法用规则来解决的问题,就得用上机器学习等知识了。那么从这个例子可以看出,你需要的知识结构是:
-
会写类SQL(包括MySQL、HiveQL等)
-
会写MR或者Spark程序,知道分布式集群原理、MapReduce的原理更好。
-
概率论和统计学知识。
-
机器学习算法。
下面就这四个知识结构方向展开说一下。
会写类SQL
学SQL的最好方法就是写了。因为SQL的语法比较简单,也没有什么原理架构什么的,所以最好的学习方式是Just write SQL!
会写MR或者Spark程序
做数据挖掘和机器学习时候,训练模型也好,从Hive里面取数据也好,比较常用的就是写MR或者Spark程序。做数据仓库的人,把数据规整放到Hive中,然后我们做分析做挖掘的就直接从Hive中取数据就好了。取出的数据怎么玩出花样就靠统计学和机器学习算法了。训练模型是计算密集型任务,一般会放到分布式集群上跑(Hadoop、Spark集群)上跑,那么就需要写分布式计算程序,就是MR和Spark程序了。学习MR和Spark的方法也大多是工程性质的,多写代码。看看Google的MapReduce论文,理解下MapReduce的原理也是有必要的。如果你对大数据开发感兴趣,想系统学习大数据的话,可以加入大数据技术学习交流扣扣君羊:522189307
概率论和统计学知识
上面讲到,我们做分析、做挖掘的从Hive里取出数据,如何玩出花样,算法,那么这类算法的数学基础就是概率论和统计学习。这里推荐中科大陈希孺教授写的两本书《概率论与数理统计》和《数理统计学教程》。陈老师讲的比较透彻,我的感觉是难啃,但是啃完之后理解的很透彻。
机器学习算法
包括经典的机器学习算法和深度学习。有个现象挺有意思的,因为工业届机器学习岗位的人80%以上的时间都在做特征工程。所谓特征工程就是理解业务,从业务中提取指标、生成特征,如果能找到强特征,对预测效果的提高会很大。真正去写算法实现的机会并不多,因为有挺成熟的算法库了,比如Spark的MLLib,weka,谷歌的tensorflow平台,各种机器学习平台。那么还要不要深入理解算法过程了呢?答案是当然要!原因是:1. 虽然写算法的机会不多,但肯定还是有的,比如说现有的算法库解决不了的问题。2. 在现有算法库的基础上需要微调,必须深入理解算法过程才能做得到。3.另外,算法库也是人写的,能造好轮子的人很厉害的,造福大众啊。
这个方向推荐李航的《统计学习方法》和周志华的《机器学习》,这两本书偏原理。都是国产书籍的良心之作。我看《统计学习方法》的时候,会拿纸和笔自己写主要的公式,必要时可以推导,达到的程度是合上书可以把这个算法的主要公式和推导过程、算法过程写出来。理解算法过程后,可以自己写实现算法,比如写一个决策树或者朴素贝叶斯。再推荐一本偏实战的,是《机器学习实战》(有英文版)。这本书里面有一些Python写的例子。
对于还在学校的,我的建议是学好数学,特别是概率论、数理统计;学好计算机基础知识,比如数据结构、算法、操作系统等这些是内功,工作之后没那么时间让你系统的学习这些知识。对于在初入工业界的童鞋,我的建议是在做特征工程的时候,可以再学学概率论和统计学,最好能深入理解算法过程,毕竟职业路程还长,练好内功,以后的招式想怎么学就怎么学。