spark的ML和MLLib两个包区别和联系?

原文链接:https://www.zhihu.com/question/35225203/answer/123986969

1. 技术角度上,面向的数据集类型不一样:ML的API是面向Dataset的(Dataframe是Dataset的子集,也就是Dataset[Row]), mllib是面对RDD的。Dataset和RDD有啥不一样呢?Dataset的底端是RDD。Dataset对RDD进行了更深一层的优化,比如说有sql语言类似的黑魔法,Dataset支持静态类型分析所以在compile time就能报错,各种combinators(map,foreach等)性能会更好,等等。

2. 编程过程上,构建机器学习算法的过程不一样:ML提倡使用pipelines,把数据想成水,水从管道的一段流入,从另一端流出:
大体概念:DataFrame => Pipeline => A new DataFrame
Pipeline: 是由若干个Transformers和Estimators连起来的数据处理过程
Transformer:入:DataFrame => 出: Data Frame
Estimator:入:DataFrame => 出:Transformer
Mllib就是一些机器学习算法的合集,无组织无纪律,一盘散沙,形态各异,经常不带作业,常年出去罚站。所以Mllib很杂很难写。

3. 对于开发者来言:如果你只是处理数据,构建机器学习算法来解决工程问题,就别想mllib和rdd了,出活最重要。如果你是Spark的开发者或者拓展者,那你必须配着茴香豆学习mllib和rdd的四种写法啊。不过撸出来一定要符合Spark 2.0的API规范哦。要不然没人用你的程序。

4. 如说上升到哲学玄学周易的角度上:我觉得Scala一直缺一个对“集”这个概念的有效表达。虽然有一个scala.collection,可是现在的数据量,这货明显不够撸啊。Dataset目前是对“集”这个概念最合理抽象。就像给哑巴一张嘴,可以说出关于数据的很多故事。
原文地址:https://www.cnblogs.com/itboys/p/6165008.html