Advertisement

Spark视频王家林大神 第7课: Spark机器学习内幕剖析

阅读量:

Spark视频王家林大神 第7课: Spark机器学习内幕剖析

本节深入探讨了 spark 在人工智能领域的核心内容, 探析 spark machine learning 核心理念的同时, 我们也将重点围绕 spark machine learning 模块的具体构成展开详细解析, 包括其算法基础、数据处理机制以及性能优化等方面的重要知识点。针对 spark 2.x 版本, 如何实现 machine learning 的教学是一个值得深究的问题, 因为这一版本不仅提升了 spark 的功能模块, 同时也对现有的 machine learning 算法进行了优化和改进。这也是众多从事 machine learning 的专业人士所关注的重点所在。spark 2.x 版本的发布标志着 spark 基为核心的人工智能统一计算时代的全面到来

从本质上来讲, spark 机器学习的核心是什么?它本质上是数据与算法结合体,在迭代中不断优化的过程。从老师的角度来看, spark 机器学习可以被视为基于 spark 平台的函数库集合,这一观点具有重要意义.值得注意的是, 将 spark 机器学习视为一个功能模块更为合适,因为许多功能单元构成了完整的函数库集合.具体而言, spark 机器学习中的 mllib(即 spark 机器学习库)包含了一系列专门设计的算法和工具.这些功能模块主要依赖于 Resilient Distributed Datasets(RDD)、DataFrames以及DataSet等核心数据结构.

在 Spark 机器学习体系中存在多种数据来源,在其最底层结构上都是基于 RDD 的封装实现,并且这一特点与 Spark 的具体版本并无关联。这种版本的发展变化只是为用户提供了一系列更高层次的应用程序接口(API),而并未带来实质性的功能扩展。例如,在 Spark 中我们常看到 DataFrame/DataSet 等类别的存在。这些类别的引入通常是基于为了使系统能够借助统一化的优化引擎来进行高效处理。在统一化的优化引擎支撑下,默认情况下所有位于其上的子框架都会获得相应的性能提升。随着抽象程度逐渐升高,在这一层面上所采用的优化算法及其占用的空间资源也随之增大。(因此认为越底层越高效的观点显然不够完善。)

在 Spark 机器学习框架中,默认数据来源多采用 RDD 的形式。参考官方文档(http://spark.apache.org/docs/latest/mllib-guide.html),在 spark 2.2.1 版本中,默认官方文档指出 MLlib 库支持两种 API:一种是基于 RDD 的 RDD-based API;另一种是基于 DataFrame 的 DataFrame-based API。值得注意的是,在 Spark RDD 中存在一个局限性:它并不提供对每行数据字段的具体信息。如果转换为 DataFrame 或 DataSet 格式,并借助统一优化引擎 Catalyst,则可显著提升数据处理效率。对于 Spark 2.x 版本中的 DataFrame 基础 API,则属于 primary 级别的。其中,在 spark.ml 包中提供了相应的 DataFrame 基础 API 实现。

在spark 2.x版本中,Mllib计划平滑过渡至基于DataFrames的方法,而 RDD方法将在未来被整合进DataFrames架构。从 spark 3.0起,Impede the use of RDD methods in MLlib.
数据框采用的是底层实现的方式包裹这些 RDD结构。
虽然目前 MLlib 继续提供基于 RDD 的方法修复其缺陷,但 MLlib 不会增添新的算法或功能到基于 RDD 的方法中。
尽管如此,从 spark 1.x 发布时开始,Mllib 已经逐渐放弃这一架构,并转而采用更加统一和高效的 DataFrames 基础架构来支持机器学习功能。
这一转变标志着 Spark 系列组件正在逐步向更高层次的抽象和更优化的方向发展。

但是从算法角度来看,机器学习最基础的就是基于向量Vector和矩阵Matrix来进行运算。即这些数据在从机器学习角度看被视为Vector和Matrix。借助于RDD/DataFrame/DataSet天然具备的分布式并行计算实现了机器学习的并行化和可扩展性等。

事实上,在机器学习领域中与graph computing存在高度相似的思维方式。在graph computing框架中进行数据处理时,其数据信息以形式存在。然而,在Spark生态系统中进行graph computing时,默认情况下系统并未直接提供Vertices、Edges或Routing Tables等对象用于解析RDD中的原始数据;相反地,在实际应用中我们通常会通过特定接口或组件来获取这些必要的元数据信息。而机器学习的方法主要依赖于向量(Vectors)和矩阵(Matrices)的形式进行处理,并且这些方法均建立在Spark的Resilient Distributed Datasets(RDD)基础之上。

Spark机器学习一方面建立在RDD、DataFrame和DataSet等数据结构之上;另一方面,则利用Java Native Interface(JNI)调用了现有的数学库实现;其中包含了大量算法与函数模块。如图所示


如何基于Spark2.x进行Spark机器学习?

  1. 巩固学习Spark Core的内容。

在分析机器学习算法的过程中,是否充分考虑了这些向量与矩阵的相关特性?

  1. 对于Spark机器学习的每个算法,学习的步骤:

第一步:算法是如何推演过来的,也就是算法的原理(应用场景)。

第二步:Spark如何用代码实现的;

第三步:案例实战;

第四步:基于上面的三步进行深入的思考。

致谢DT大数据梦工厂和王家林大神!

全部评论 (0)

还没有任何评论哟~