大數據現在是個很寬泛的職業方向了。廣義的大數據在工業界分為:
基礎架構。這個崗位主要為大數據提供底層的存儲、基礎設施等,要求是熟悉Hadoop、Spark等分布式集群。
數據倉庫。這個崗位和業務緊密掛鉤,主要做的工作是深入了解業務,設計出業務擴展性好的數據倉庫。要求是會寫SQL、懂數據倉庫設計。
數據分析/數據挖掘/算法開發。這類崗位屬于大數據的應用,真正把數據轉化為生產力的工作。
這三類崗位的依賴關系是3->2->1。
我們一般說的大數據方向應該是指3.數據分析/數據挖掘/算法開發。這個崗位不但要學習本崗位要求的知識和技能,也必須了解崗位1、2的技術。比如說,你參與做一個推薦系統,那么你要獲取數據,簡單分析數據需要用Sql(一般是HiveQL),再復雜點的邏輯得寫MR(MapReduce程序,下同)或者Spark程序,更復雜的邏輯或者場景,無法用規則來解決的問題,就得用上機器學習等知識了。那么從這個例子可以看出,你需要的。
下面就這四個知識結構方向展開說一下。
1.會寫類SQL
學SQL的最好方法就是寫了。因為SQL的語法比較簡單,也沒有什么原理架構什么的,所以最好的學習方式是JustwriteSQL!
2.會寫MR或者Spark程序
做數據挖掘和機器學習時候,訓練模型也好,從Hive里面取數據也好,比較常用的就是寫MR或者Spark程序。做數據倉庫的人,把數據規整放到Hive中,然后我們做分析做挖掘的就直接從Hive中取數據就好了。取出的數據怎么玩出花樣就靠統計學和機器學習算法了。訓練模型是計算密集型任務,一般會放到分布式集群上跑(Hadoop、Spark集群)上跑,那么就需要寫分布式計算程序,就是MR和Spark程序了。學習MR和Spark的方法也大多是工程性質的,多寫代碼。看看Google的MapReduce論文,理解下MapReduce的原理也是有必要的。
3.概率論和統計學知識
上面講到,我們做分析、做挖掘的從Hive里取出數據,如何玩出花樣,算法,那么這類算法的數學基礎就是概率論和統計學習。這里推薦中科大陳希孺教授寫的兩本書《概率論與數理統計》和《數理統計學教程》。陳老師講的比較透徹,我的感覺是難啃,但是啃完之后理解的很透徹。
4.機器學習算法
包括經典的機器學習算法和深度學習。有個現象挺有意思的,因為工業屆機器學習崗位的人80%以上的時間都在做特征工程。所謂特征工程就是理解業務,從業務中提取指標、生成特征,如果能找到強特征,對預測效果的提高會很大。真正去寫算法實現的機會并不多,因為有挺成熟的算法庫了,比如Spark的MLLib,weka,谷歌的tensorflow平臺,各種機器學習平臺。那么還要不要深入理解算法過程了呢?答案是當然要!原因是:
(1)雖然寫算法的機會不多,但肯定還是有的,比如說現有的算法庫解決不了的問題。
(2)在現有算法庫的基礎上需要微調,必須深入理解算法過程才能做得到。
(3)另外,算法庫也是人寫的,能造好輪子的人很厲害的,造福大眾啊。
這個方向推薦李航的《統計學習方法》和周志華的《機器學習》,這兩本書偏原理。都是國產書籍的良心之作。我看《統計學習方法》的時候,會拿紙和筆自己寫主要的公式,必要時可以推導,達到的程度是合上書可以把這個算法的主要公式和推導過程、算法過程寫出來。理解算法過程后,可以自己寫實現算法,比如寫一個決策樹或者樸素貝葉斯。再推薦一本偏實戰的,是《機器學習實戰》(有英文版)。這本書里面有一些Python寫的例子。
對于還在學校的,我的建議是學好數學,特別是概率論、數理統計;學好計算機基礎知識,比如數據結構、算法、操作系統等這些是內功,工作之后沒那么時間讓你系統的學習這些知識。對于在初入工業界的童鞋,我的建議是在做特征工程的時候,可以再學學概率論和統計學,最好能深入理解算法過程,畢竟職業路程還長,練好內功,以后的招式想怎么學就怎么學。