在已经有了一定基础后,继续学习新东西的时候,最首先的就是弄清楚要学的东西能做什么,跟自己已有的知识有什么挂钩的地方。现在打算学习Spark,所以接下来会介绍Spark的最基础的入门。
一、Spark有些什么?
1.全面兼容Hadoop的生态系统的MapReduce框架(这可是分布式计算的基础啊)
2.提供Scala、Java和Python的语言编程接口,总有一门语言适合你��(三门都不会就老实学一门吧)
3.提供一个叫MLlib的工具包,可以支持机器学习或者数据挖掘方面的工作,据说还很完善,效果很好(没试过的小伙伴表示都惊呆了!这是真的吗?)
二、Spark的特性
1.Resilient Distributed Datasets,以下用RDD表示(可扩展分布式数据集,这么一翻译感觉都高大上了呢~)用SparkContext.parallelize和SparkContext.textFile、SparkContext.wholeTextFile可以分别从内存、HDFS文本、HDFS文件夹这三个数据源读取RDD数据,然后就可以快乐的用map、reduce等各种方法来处理数据啦!
2.Caching RDDs用于跨集群缓存,如果调用rddFromTextFile.cache方法,相当于告诉机器说,该数据需要保存在内存中,以支持后续使用;对应的有persist方法,用于辨识函数是运行在cache数据上面的
3.Spark提供script支持运行在Amazon EC2云服务上面的集群,当然得先有云服务的账号,注册一个去吧,妥妥的
三、商业上的需求有哪些?
1.个人推荐
2.目标市场和人群划分
3.预测模型和分析
四、机器学习和数据挖掘的共同流程
1.数据获取和存储
2.数据清洗和转化
3.模型训练
4.模型评估,循环测试调整
5.模型部署和使用
6.监控和反馈
五、Spark可以用来训练哪些模型?
1.推荐引擎(Recommendation Engine)
推荐引擎里面广泛使用的两个方法分别是基于文本过滤(content-based filtering)和协同过滤(collaborative filtering),书中使用MLlib中的ALS模块来训练推荐引擎,训练之后的模型,调用predict方法来使用
使用MSE(Mean Squared Error)、RMSE(Root Mean Squared Error)、MAP(Mean Average Precision)等评估模型
2.分类模型(Classification Model)
分类模型使用的方法有:线性模型-linear models(想象在平面画一条或多条线来分隔不同的点,分到同一个区域的被认为是同一个类别)、决策树模型-decision trees(原始数据不断的在每个断点判断并作出选择,直到树的叶子节点,该节点的类标签就是该数据的标签)和朴素贝叶斯-naive Baye(由已知的概率,推断具有数据类标签的概率)
org.apache.spark.mllib.classification中提供LogisticRegressionWith SGD、SVMWithSGD和NaiveBayes三个分类训练器,org.apache.spark.mllib.tree提供一些对应的树形训练器
使用precision和recall来评估模型
3.回归模型(Regression Model)
回归模型有两个主要类型:线性回归模型(linear regression model)和决策树回归模型(decision tree regression model)(跟前面分类模型岂不是重叠,作者你在绕晕我吗?其实不是的,使用分类模型预测的值是分散的,而使用回归模型预测得到的值是连续的,这就是区别)
pyspark.mllib.regression中提供LinearRegressionWithSGD用于线性回归模型训练,pyspark.mllib.tree中提供DecisionTree.trainRegressor用于决策树回归模型的训练
4.聚类模型(Clustering Model)
org.apache.spark.mllib.clustering提供KMeans用于训练K-Means聚类模型,当然这个模块里面还有别的训练算法,用起来吧……
六、Spark其他的一些功能
- 1.可用于SGD、L-BGFS等梯度算法的计算
- 2.可用于交叉验证(Cross Validation)
- 3.兼容matplotlib
- 4.降维(Dimensionality Reduction)
降维方法有PCA(Principal Components Analysis - 主成分分析)和SVD(Singular Value Decomposition - 奇异值分解)
org.apache.spark.mllib.linalg.Matrix和org.apache.spark.mllib.linalg.distributed.RowMatrix提供训练PCA的方法computePrincipalComponents,提供训练SVD的方法computeSVD - 5.Word2Vec
org.apache.spark.mllib.feature.Word2Vec用于Word2Vec计算 - 6.online learning机制
Spark提供Spark Streaming模块用于动态获取HDFS数据,并用于online learning,这个过程涉及到一个叫Window operators的方法,该方法使用窗口定义,从数据流stream中动态的获取一个窗口的数据,然后使用,这个窗口的定义要小心,如果窗口的调度时间比数据的处理时间大得多,可能出现数据阻塞的问题,这个时候需要将窗口的大小扩展
使用org.apache.spark.streaming.StreamingContext创建streming