RDD 是记录的只读分区集合。RDD 是或者曾经是 Spark 的基本数据结构。它允许程序员以容错方式在大型集群上执行内存计算。因此,加快任务。
另一方面,数据框将数据组织到命名列中。它是一个不可变的分布式数据集合。Spark 中的 DataFrame 允许开发人员将结构强加到分布式数据集合上,从而实现更高级别的抽象。
两者非常不同,有关两者的更多详细信息可以在此链接上找到https://data-flair.training/blogs/apache-spark-rdd-vs-dataframe-vs-dataset/
mllib
在火花的最初版本中,因为当时火花只与 RDD 一起工作。现在很多 Spark 编码都是围绕ml
支持的数据帧完成的。Spark 也mllib
进行了维护。
从 Spark 2.0 开始,spark.mllib 包中基于 RDD 的 API 已进入维护模式。Spark 的主要机器学习 API 现在是 spark.ml 包中基于 DataFrame 的 API。
问:有什么影响?
MLlib 仍将支持 spark.mllib 中基于 RDD 的 API 并修复错误。MLlib 不会向基于 RDD 的 API 添加新功能。在 Spark 2.x 版本中,MLlib 将向基于 DataFrames 的 API 添加功能,以与基于 RDD 的 API 实现功能对等。在达到功能奇偶校验后(对 Spark 2.3 进行粗略估计),基于 RDD 的 API 将被弃用。基于 RDD 的 API 预计将在 Spark 3.0 中删除。
问:为什么 MLlib 切换到基于 DataFrame 的 API?
DataFrames 提供了比 RDDs 更加用户友好的 API。DataFrames 的许多好处包括 Spark 数据源、SQL/DataFrame 查询、Tungsten 和 Catalyst 优化以及跨语言的统一 API。MLlib 基于 DataFrame 的 API 提供了跨 ML 算法和多种语言的统一 API。DataFrames 促进了实用的 ML Pipelines,尤其是特征转换。有关详细信息,请参阅管道指南。
问:什么是“Spark ML”?
“Spark ML”不是官方名称,但偶尔用于指代基于 MLlib DataFrame 的 API。这主要是由于基于 DataFrame 的 API 使用的 org.apache.spark.ml Scala 包名称,以及我们最初用来强调管道概念的“Spark ML Pipelines”术语。
问:MLlib 是否已弃用?
不。MLlib 包括基于 RDD 的 API 和基于 DataFrame 的 API。基于 RDD 的 API 现在处于维护模式。但是 API 和整个 MLlib 都没有被弃用。
您将在 Sparks 官方版本中找到更多详细信息https://spark.apache.org/docs/latest/ml-guide.html#announcement-dataframe-based-api-is-primary-api