【IT168 评论】如今,再讨论大数据,无论是互联网行业还是传统行业似乎都有话说。大数据改变了很多,也带来了很多。人工智能作为大数据的一个重要分支,也纷纷被各大企业划入未来的规划之内。不久前,李开复就曾说过,未来的人工智能市场将比如今大火的移动互联市场要大10倍。
本文将讨论Spark的开源机器学习库Spark ML。从Spark 1.6开始,Spark ML软件包中基于DataFrame的API推荐明显多于基于RDD的API,但是还未完全取代。从Spark 2.0开始,Spark.ML软件包中基于RDD的API已进入维护模式。Spark的主要机器学习API现在是Spark.ML包中基于DataFrame的API。
Databricks服务对数据科学家来说是一个很好的选择。它具有完整的摄取,特征选择,模型构建和评估功能,以及与数据源的大量集成和出色的可扩展性。Databricks服务提供了一个基于Spark的云服务。Databricks公司由Spark的原创开发商Matei Zaharia和来自U.C.Berkeley’s AMPLab的公司创立。同时,Databricks也是Apache Spark项目的主要贡献者。
Spark ML特点
Spark ML库提供了通用的机器学习算法,如分类,回归,聚类和协同过滤(但没有深度神经网络)以及用于特征提取,变换,降维和用于构建,评估和调整ML的选项和工具管道。Spark ML还包括用于保存和加载算法,模型,管道,用于数据处理以及进行线性代数和统计的实用程序。
Spark ML是用Scala编写的,并使用了线性代数包Breeze。Breeze依靠netlib-java来优化数值处理。 如果你有机器优化的本地netlib-java二进制代理,这将使整个库比纯JVM实现运行得更快。在Mac上,默认情况下安装的是veclib框架。
你也可以通过Databricks配置的Spark集群使用GPU,而不仅仅是只有CPU的Apache Spark。GPU可以为具有大量数据的复杂机器学习模型带来10倍的速度提升,尽管与机器优化的CPU库相比,这可能导致数据规模较小的简单机器学习模型的训练速度降低。
MLlib实现了分类和回归的常用算法和模型,这可能是新手容易混乱的点,但专家可能会有更好的用于数据分析的模型选择。对于这么多模型,Spark ML增加了超参数调整的重要特性,也称为模型选择,它允许分析人员设置参数网格,估计器和评估者,并通过交叉验证方法(耗时但很准确)或训练验证分割方法(很快但不太准确)找到非常好的的数据模型。
Spark ML拥有针对Scala和Java的完整API,主要是针对Python的完整API以及针对R的部分API。通过示例计算,ML覆盖:54个Java和60个Scala ML示例,52个Python ML 示例,但只有5个R示例。
Spark安装
如果你的电脑上已经安装了java 1.8.0_05,那安装Scala2.11.8就没有其他额外工作了,也可以考虑安装再安装Python 2.7和R 3.3.1。安装Spark时,当Spark没有检测到Hadoop会发出警告:“WARN NativeCodeLoader:无法为您的平台加载native-hadoop库......请在适当的情况下使用内置java类” 。
目前有一种使用默认Spark AMI在Amazon EC2上设置Spark集群的简单方法。据推测,如果你已经安装了Spark和具有EC2权限的Amazon帐户,整个过程大约只需要五分钟。
在服务器上安装带有Spark的Hadoop集群可能很复杂,这取决于你使用的集群管理器。除非你自己就是做这个的,否则你可能很难解决这个问题。
如果你不想安装但仍想使用Spark,你可以在Databricks上运行。一个免费的Databricks社区集群可以提供6GB的RAM节点和0.88核。付费集群可以在Amazon r3.2xlarge EC2实例上部署内存优化节点(30GB,四核),部署在Amazon c3.4xlarge EC2实例上的计算优化节点(15GB,八核)或部署在Amazon上的GPU节点 g2.2xlarge(一个GPU)或g2.8xlarge(四个GPU)EC2实例类型。
使用Databricks的一个优点是,你可以使用从1.3到当前的任何Spark版本创建集群,这很重要,因为一些旧的Spark ML程序包括示例,只能在特定版本的Spark上正确运行,其他版本会抛出错误。
运行Spark ML
虽然Databricks默认提供了一个兼容Jupyter notebook来运行Spark,标准的Apache Spark从命令行开始分布式运行。Spark存储库中有多个脚本:./ bin / run-example从存储库运行示例代码; ./bin/spark-shell运行交互式Scala shell; ./bin/pyspark运行交互式Python shell; ./bin/sparkR用于运行R shell; 和用于运行应用程序的通用./bin/spark-submit。Spark提交脚本继而运行spark-class,它负责查找Java和Spark .jar文件,然后启动所需的脚本。
默认情况下,Spark都会生成一个详细的日志输出流,即使没有实质性的输出。下图展示的是使用Spark来计算Pi的一个Scala示例。 计算值,从底部大约10行,仅精确到三位数。
幸运的是,可以使用设置来减小终端日志输出。但是还有一个更好的方法来运行Spark。使用Jupyter类型的笔记本隐藏日志记录并且散置解释性文本,代码和输出,如下面两个Databricks屏幕截图所示。
实际上,你不需要在Databricks上用Jupyter Notebook运行Spark。你可以在本地安装Jupyter,并在默认的IPython内核之上添加所需的任何语言的核(例如Scala和R)。如果你在网上搜索“如何在Jupyter Notebook上使用Spark”,你会发现很多具体说明。
学习Spark ML
在Spark网站上,你将看到用于运行分布式Scala,Java,Python和R示例的说明,Spark API快速启动和编程指南及其他相关文件。示例页面解释了Python,Scala和Java中的一些简单示例。
Spark遇到TensorFlow
正如我们所看到的,Spark ML提供了基本机器学习,特征选择,管道等。它在分类,回归,聚类和过滤方面都做得很好。鉴于它是Spark的一部分,它还具有访问数据库,流和其他数据源的强大访问权限。
另一方面,Spark ML并没有采用与Google TensorFlow,Caffe和Microsoft Cognitive Toolkit相同的方式建模和训练深度神经网络。为此,Databricks一直致力于将Spark的可扩展性和超参数调整与TensorFlow的深度神经网络训练和部署相结合。
如果你安装了Hadoop,并希望用机器学习做数据科学,Spark ML是一个明智的选择。如果你需要用深度神经网络正确建模数据,那么Spark ML不是最好的选择,但你可以将它与其他工具相结合,以创造一个更适合的工具。
成本:免费,因为开源。 平台:Spark运行在Windows和类Unix系统(如Linux,MacOS)上,使用Java 7或更高版本,Python 2.6 / 3.4或更高版本以及R 3.1或更高版本。 对于Scala API,Spark 2.0.1使用Scala 2.11。