`pyspark mllib`与`pyspark ml`包的比较。

18

pyspark mllibpyspark ml包之间有什么区别?

https://spark.apache.org/docs/latest/api/python/pyspark.mllib.html

https://spark.apache.org/docs/latest/api/python/pyspark.ml.html

pyspark mllib似乎是针对数据框架级别的目标算法,而pyspark ml则不同。

我发现一个区别是pyspark ml实现了pyspark.ml.tuning.CrossValidator,而pyspark mllib没有。

我的理解是,如果在Apache Spark框架上实现算法,应该使用mllib,但似乎存在分歧?

似乎没有在这两个框架之间进行互操作性,除非转换类型,因为它们各自包含不同的包结构。

1个回答

23
根据我的经验,pyspark.mllib类只能与pyspark.RDD一起使用,而(正如您提到的)pyspark.ml类只能与pyspark.sql.DataFrame一起使用。在pyspark.ml的文档中提到了支持此功能,pyspark.ml package的第一个条目说明:

基于DataFrame的机器学习API,让用户可以快速组装和配置实用的机器学习流程。

现在我想起了一篇我之前读过的有关Spark 2.0中可用的三个API的文章,它们的相对优缺点以及它们的比较性能。A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets。当时我正在新客户端服务器上进行性能测试,并且很感兴趣是否存在开发基于RDD方法的情况,而不是基于DataFrame方法(这是我选择的方法),但我偏离了主题。
总的来说,作者得出结论:对于低级操作,RDD非常适用,但对于高级操作、查看和与其他API连接,DataFrames和DataSets更为优越。举个例子,如果您的数据已经被结构化,则DataFrame比RDD具有更好的性能表现;当操作变得复杂时,此优势将会非常显著。另一个观察结果是,缓存时DataSets和DataFrames比RDD占用的内存要少得多。

回到你的问题,我认为肯定是pyspark.ml。因为该包中的类是专门设计用于利用pyspark.sql.DataFrames。如果你使用DataFrame和RDD结构的相同数据进行测试,那么在这些包中实现复杂算法的性能将会显著提高。此外,查看数据并开发引人入胜的可视化效果将更直观且性能更好。


根据我的经验,在RDD级别实现算法比在Dataframe级别更快,但我更倾向于函数式(RDD)而不是SQL(Dataframe)风格。 - blue-sky
2
书籍《Spark 2权威指南》验证了这一答案,并实际上鼓励使用以DataFrame为中心的更新版本MLib。事实上,我相信它说旧的MLlib现在处于维护状态,只会接收修复程序。不幸的是,我没有给你提供书籍链接(因为我是在手机上输入的),但它是奥莱利公司的最新版本书籍。 - NYCeyes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接