在已经有了一定基础后,继续学习新东西的时候,最首先的就是弄清楚要学的东西能做什么,跟自己已有的知识有什么挂钩的地方。现在打算学习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