【问题标题】:`pyspark mllib` versus `pyspark ml` packages`pyspark mllib` 与 `pyspark ml` 包
【发布时间】:2017-08-31 14:52:37
【问题描述】:

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.CrossValidatorpyspark mllib 没有。

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

如果不转换类型,每个框架之间似乎没有互操作性,因为它们每个都包含不同的包结构。

【问题讨论】:

    标签: python python-3.x apache-spark pyspark


    【解决方案1】:

    根据我的经验,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 的方法(我选择的方法)的场景,但我离题。

    要点是,在某些情况下,每种情况都非常适合,而在另一些情况下可能不适合。我记得的一个例子是,如果你的数据已经是结构化的,DataFrames 比 RDD 有一些性能优势,随着操作复杂性的增加,这显然是非常激烈的。另一个观察结果是,DataSet 和 DataFrame 在缓存时比 RDD 消耗的内存要少得多。总而言之,作者得出结论,对于低级操作,RDD 很棒,但对于高级操作,查看和绑定其他 API 的 DataFrames 和 DataSets 更胜一筹。

    所以回到你的问题,我相信答案是响亮的pyspark.ml,因为这个包中的类旨在利用pyspark.sql.DataFrames。我想,如果您要针对与 DataFrame 与 RDD 结构化的相同数据进行测试,那么在每个包中实现的复杂算法的性能将非常重要。此外,查看数据和开发引人入胜的视觉效果会更直观且性能更好。

    【讨论】:

    • +1 ,根据我的经验,在算法实现方面,在 RDD 级别实现比在数据帧级别更快,但我更倾向于使用函数式(rdd)而不是 sql(数据帧)样式。
    • 《Spark 2 The Definitive Guide》一书验证了这个答案,事实上,它鼓励使用以 DataFrame 为中心的更新 MLib。事实上,我相信它说旧的 MLlib 现在处于维护状态,只会收到修复。遗憾的是,我没有这本书的链接(因为我是用小手机打出来的),但它是 O'Reilly 的最新一本书。
    猜你喜欢
    • 2014-12-11
    • 2016-08-05
    • 2023-04-01
    • 2019-09-10
    • 2019-04-11
    • 2020-10-06
    • 1970-01-01
    • 2020-09-17
    • 2016-12-14
    相关资源
    最近更新 更多