热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《Spark核心技术与高级应用》——1.2节Spark的重要扩展

本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1.

本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊 向海 代其锋 马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看

1.2 Spark的重要扩展
大家知道,在Hadoop中完成即席查询(ad-hoc queries)、批处理(batch processing),流式处理(stream processing),需要构建不同的团队,每个团队需要不同的技术和经验,很难做到共享。而Spark实现了平台融合,一个基础平台解决所有的问题,一个团队拥有相同的技术和经验完成所有的任务。
基于Spark的基础平台扩展了5个主要的Spark库,包括支持结构化数据的Spark SQL、处理实时数据的Spark Streaming、用于机器学习的MLlib、用于图计算的GraphX、用于统计分析的SparkR,各种程序库与Spark核心API高度整合在一起,并在持续不断改进。
1.2.1 Spark SQL和DataFrame
Spark SQL是Spark的一个处理结构化数据的模块,提供一个DataFrame编程抽象。它可以看作是一个分布式SQL查询引擎,主要由Catalyst优化、Spark SQL内核、Hive支持三部分组成。
相对于传统的MapReduce API,Spark的RDD API有了数量级的飞跃,从Spark SQL 1.3.0开始,在原有SchemaRDD的基础上提供了与R风格类似的DataFrame API。
DataFrame是以指定列(named columns)组织的分布式数据集合,在Spark SQL中,相当于关系数据库的一个表,或R/Python的一个数据框架,但后台更加优化。
DataFrames支持多种数据源构建,包括:结构化数据文件(Parquet、JSON)加载、Hive表读取、外部数据库读取、现有RDD转化,以及SQLContext运行SQL查询结果创建DataFrame,如图1-4所示。


《Spark核心技术与高级应用》——1.2节Spark的重要扩展

新的DataFrame API一方面大幅度降低了开发者学习门槛,同时支持Scala、Java、Python和R语言,且支持通过Spark Shell、Pyspark Shell和SparkR Shell提交任务。由于来源于SchemaRDD,DataFrame天然适用于分布式大数据场景。
关于Spark SQL更具体的内容和案例会在后面第6章详细介绍。
1.2.2 Spark Streaming
Spark Streaming属于核心Spark API的扩展,它支持高吞吐量和容错的实时流数据处理,它可以接受来自Kafka、Flume、Twitter、ZeroMQ或TCP Socket的数据源,使用复杂的算法表达和高级功能来进行处理,如Map、Reduce、Join、Window等,处理的结果数据能够存入文件系统、数据库。还可以直接使用内置的机器学习算法、图形处理算法来处理数据,数据输入/输出示意图如图1-5所示。


《Spark核心技术与高级应用》——1.2节Spark的重要扩展

Spark Streaming提供一种名为离散流(DStream)的高级抽象连续数据流。DStream直接支持Kafka、Flume的数据源创建,或者通过高级操作其他DStream创建,一个DStream是一个序列化的RDD。
关于Spark Streaming更具体的内容和案例会在第7章详细介绍。
1.2.3 Spark MLlib和ML
MLlib是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器。MLlib目前支持4种常见的机器学习问题:二元分类、回归、聚类和协同过滤,以及一个底层的梯度下降优化基础算法。
MLlib基于RDD,天生就可以与Spark SQL、GraphX、Spark Streaming无缝集成,MLlib是MLBase的一部分,MLBase通过边界定义,力图将MLBase打造成一个机器学习平台,让机器学习开发的门槛更低,让一些并不了解机器学习的用户也能方便地使用MLBase这个工具来处理自己的数据。
MLlib支持将本地向量和矩阵存储在单个机器中,也包括有一个或更多的RDD支持的分布式矩阵。在目前的实现中,本地向量和矩阵都是为公共接口服务的简单数据模式,MLlib使用了线性代数包Breeze。在监督学习中使用到的样本在MLlib中成为标记点。
Spark MLlib架构由底层基础、算法库和应用程序三部分构成。底层基础包括Spark的运行库、进行线性代数相关技术的矩阵库和向量库。算法库包括Spark MLlib实现的具体机器学习算法,以及为这些算法提供的各类评估方法;主要实现算法包括建立在广义线性回归模型的分类和回归,以及协同过滤、聚类和决策树。在最新的Spark 1.5.0版本中还新增了基于前馈神经网络的分类器算法MultilayerPerceptronClassif?ier(MLPC),频繁项挖掘算法Pref?ixSpan、AssociationRules,实现Kolmogorov-Smirnov检验等等算法,随着版本的演进,算法库也会越来越强大。应用程序包括测试数据的生成以及外部数据的加载等功能。
Spark的ML库基于DataFrame提供高性能API,帮助用户创建和优化实用的机器学习流水线(pipeline),包括特征转换独有的Pipelines API。相比较MLlib,变化主要体现在:
1)从机器学习的Library开始转向构建一个机器学习工作流的系统,ML把整个机器学习的过程抽象成Pipeline,一个Pipeline是由多个Stage组成,每个Stage是Transformer或者Estimator。
2)ML框架下所有的数据源都是基于DataFrame,所有模型也尽量都基于Spark的数据类型表示,ML的API操作也从RDD向DataFrame全面转变。
关于MLlib和ML库更具体的内容和案例会在第8章详细介绍。
1.2.4 GraphX
从社交网络到语言建模,图数据规模和重要性的不断增长,推动了数不清的新型并行图系统(例如,Giraph和GraphLab)的发展。通过限制可以表达的计算类型和引入新的技术来分割和分发图,这些系统可以以高于普通的数据并行系统几个数量级的速度执行复杂的图算法,如图1-7所示。


《Spark核心技术与高级应用》——1.2节Spark的重要扩展

GraphX是用于图和并行图计算的新Spark API。从上层来看,GraphX通过引入弹性分布式属性图(resilient distributed property graph)扩展了Spark RDD。这种图是一种伪图,图中的每个边和节点都有对应的属性。
为了支持图计算,GraphX给出了一系列基础的操作(例如,subgraph、joinVertices、和MapReduceTriplets)以及基于Pregel API的优化变体。除此之外,GraphX还包含了一个不断扩展的图算法和构建器集合,以便简化图分析的任务。
关于GraphX更具体的内容和案例会在第9章中详细介绍。
1.2.5 SparkR
SparkR是AMPLab发布的一个R开发包,为Apache Spark提供了轻量的前端。SparkR提供了Spark中弹性分布式数据集(RDD)的API,用户可以在集群上通过R shell交互性地运行Job。例如,我们可以在HDFS上读取或写入文件,也可以使用lapply函数进行方法调用,定义对应每一个RDD元素的运算。
Spark具有快速(fast)、可扩展(scalable)、交互(interactive)的特点,R具有统计(statistics)、绘图(plots)的优势,R和Spark的有效结合,解决了R语言中无法级联扩展的难题,也极大地丰富了Spark在机器学习方面能够使用的Lib库。
除了常见的RDD函数式算子Reduce、reduceByKey、groupByKey和Collect之外,SparkR也支持利用lapplyWithPartition对每个RDD的分区进行操作。SparkR也支持常见的闭包(closure)功能:用户定义的函数中所引用到的变量会自动被发送到集群中的其他的机器上。
SparkR的工作原理如图1-8所示,首先加载R方法包和rJava包,然后通过SparkR初始化SparkContext。


《Spark核心技术与高级应用》——1.2节Spark的重要扩展

关于SparkR处理数据挖掘更具体的内容和案例会在第10章详细介绍。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
author-avatar
中二丶夜夜
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有