Spark大数据商业实战三部曲:内核解密|商业案例|性能调优
上QQ阅读APP看书,第一时间看更新

2.5 Spark 2.2 MLlib

Spark 2.2版本中新增了基于DataFrame的机器学习;Spark 2.2对R语言的机器学习新增了更多算法的支持,如Random Forest(随机森林)、Gaussian Mixture Model(高斯混合模型)、Naive Bayes(朴素贝叶斯)、Survival Regression(生存回归分析)以及K-Means(K-均值)等算法。

Apache Spark 2.2.0版本中MLlib的更新如下。

1.基于DataFrame的API的新算法

 SPARK-14709:LinearSVC(线性SVM分类器)(Scala/Java/Python/R)。

 SPARK-19635:基于DataFrame的API(Scala/Java/Python)中的ChiSquare测试。

 SPARK-19636:基于DataFrame的API(Scala/Java/Python)的相关性。

 SPARK-13568:用于估算缺失值的计算特征变换器(Scala/Java/Python)。

 SPARK-18929:为GLM增加Tweedie分布(Scala/Java/Python/R)。

 SPARK-14503:FPGrowth频繁模式挖掘和关联规则(Scala/Java/Python/R)。

2.现有的算法增加到Python和R API

 SPARK-18239:梯度增强树。

 SPARK-18821:二分K均值。

 SPARK-18080:区域敏感哈希(LSH)(Python)。

 SPARK-6227:PySpark的分布式PCA和SVD(基于RDD的API)。

3.主要的BUG修复

 SPARK-19110:DistributedLDAModel.logPrior正确性修复。

 SPARK-17975:EMLDAOptimizer失败产生的异常ClassCastException(由GraphX检查点错误引起)。

 SPARK-18715:修正二项式GLM中AIC计算的错误。

 SPARK-16473:二分K均值失败,训练使用一定的输入次数时,提示“java.util. NoSuchElementException: key not found”。

 SPARK-19348:pyspark.ml.Pipeline在多线程使用下损坏。

 SPARK-20047:箱约束逻辑回归。

4.废弃功能

SPARK-18613:spark.ml LDA类不应在API中公开spark.mllib。在spark.ml.LDAModel中已弃用oldLocalModel和getModel。

5.行为变化

SPARK-19787:DeveloperApi ALS.train()使用默认的regParam值0.1,而不是1.0,以匹配常规ALS API的默认regParam设置。

2.5.1 基于DataFrame的Machine Learning API

我们可以从下载的Spark源码中看到加入了spark.ml包(原来的spark.mllib仍然存在),这是在新版本中加入的基于DataFrame的机器学习代码包,存储在DataFrames中的向量和矩阵现在使用更高效的序列化,减少了调用MLlib算法的开销。现在spark.ml包代替基于RDD的ML成为主要的SparkMLAPI。有一个很重要的功能是,现在可以保存和加载Spark支持的所有语言的Machine Learning pipeline和model了。

2.5.2 R的分布式算法

Apache Spark 2.2.0版本中SparkR的更新如下。

SparkR在2.2.0版本中为现有的Spark SQL功能增加了广泛的支持。

1.主要更新的功能点

 SPARK-19654:R的结构化流式API。

 SPARK-20159:在R中支持完整的Catalog API。

 SPARK-19795:列函数to_json、from_json。

 SPARK-19399:在DataFrame上合并,并在列上合并。

 SPARK-20020:支持DataFrame检查点。

 SPARK-18285:R中的多列近似数。

2.废弃功能

SPARK-20195:弃用createExternalTable。

3.行为变化

SPARK-19291:为SparkR高斯混合模型增加了对数似然,但这导致SparkR 2.1版本与2.2版本不兼容:从SparkR 2.1保存的高斯混合模型可能不会加载到SparkR 2.2中。计划未来推出SparkR的向后兼容性保证。

4.已知的问题

SPARK-21093:在SparkR中,多次执行有时会失败。

Spark 2.X版本对SparkR的最大改进是用户自定义函数,包括dapply、gapply和lapply,前两者可以用于执行基于分区的用户自定义函数(如分区域模型学习),而后者可用于超参数整定。

Spark 2.X对R语言的机器学习增加了几种算法:Random Forest(随机森林)、Gaussian Mixture Model(高斯混合模型)、Naive Bayes(朴素贝叶斯)、Survival Regression(生存回归分析)以及K-Means(K-均值)等。支持多项逻辑回归,来提供与glmnet R相似的功能。

同时对Python的机器学习也增加了一些算法,如LDA(线性判别式分析Linear Discriminant Analysis)、高斯混合模型、广义线性回归等。