2017-04-05 98 views
4

包装pyspark mllibpyspark ml有什么区别? :`pyspark mllib`与`pyspark 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但似乎有分裂?

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

回答

8

从我的经验pyspark.mllib类只能与pyspark.RDD的使用,而(如你所说)pyspark.ml类只能与pyspark.sql.DataFrame的使用。有提到支持这一文件在pyspark.ml,第一个条目中pyspark.ml package状态:

基于数据帧机器学习的API,让用户能够快速组装和配置实用机器学习管道。

现在我想起了一篇关于Spark 2.0中提供的三个API的相关优点/缺点和比较性能的文章。 A Tale of Three Apache Spark APIs: RDDs, DataFrames, and Datasets。我正在对新客户端服务器进行性能测试,并且对于开发基于RDD的方法而不是基于DataFrame的方法(我选择的方法)的情况有兴趣,但我感兴趣离题。

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

所以要回到你的问题的整个圆圈,我相信答案是一个响亮的pyspark.ml,因为这个包中的类被设计为利用pyspark.sql.DataFrames。我可以想象,如果要针对与DataFrame vs RDD相同的数据进行测试,那么在这些软件包中实现的复杂算法的性能将会很高。此外,查看数据和开发引人注目的视觉效果将更加直观并且具有更好的性能。

+0

+1,根据我的经验,在算法实现方面实现RDD级别的速度要快于数据帧级别,但我倾向于选择函数(rdd)而不是sql(数据框架)样式。 –