第三章SparkCore操作指南.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

3

第三章

SparkCore

3.1

RDD-Resilient

Distributed

Dataset

Apache

Spark

编程中,RDD(Resilient

Distributed

Dataset,弹性分布式数据集)是

Spark

Core

中最基本的数据抽象,代表一个不可变、可分区、可并行计算的元素集合。RDD

许用户在集群上以容错的方式执行计算。

3.1.1

RDD五大特性

首先回顾下Spark

WordCount的核心代码流程:

sc.textFile(...).flatMap(_.split(,)).map((_,1)).reduceByKey(_+_).foreach(println)

结合以上代码,我们理解RDD的五大特性,RDD理解图如下:

RDD五大特性:

1)

RDD由一系列Partition组成(A

list

of

partitions)

RDD由多个Partition组成,这些Partition分布在集群的不同节点上。如果读取的是HDFS中的数

据,每个partition对应一个Split,每个Split大小默认与每个Block大小一样,。

2)

函数是作用在每个Partition(Split)上的(A

function

for

computing

each

split)

RDD

定义了在每个分区上进行计算的函数,例如

flatMap、map

等操作,这些函数对每个分区

中的数据进行处理。

3)

RDD之间有依赖关系(A

list

of

dependencies

on

other

RDDs)

RDD之间存在依赖关系,上图中RDD2可以基于RDD1生成,RDD1叫做父RDD,RDD2叫做子

RDD。

4)

分区器作用在K,V格式的RDD上(Optionally,

a

Partitioner

for

key-value

RDDs)

上图中RDD3中的数据是Tuple类型,这种类型叫做K,V格式的RDD。Spark分区器作用是决定数

据发往下游RDD哪个Partition中,分区器只能作用在这种K,V格式的RDD中,默认根据Key的

hash值与下游RDD的Partition个数取模决定该条数据去往下游RDD的哪个Paritition中。

5)

RDD提供一系列最佳的计算位置(Optionally,

a

list

of

preferred

locations

to

compute

each

split

on)

RDD

提供每个分区的最佳计算位置,通常是数据所在的节点,这样可以将计算task调度到数据所

在的位置,减少数据传输,提高计算效率(计算移动,数据不移动原则)。

关于RDD的注意点如下:

textFile底层读取文件方式与MR读取文件方式类似,首先对数据split,默认Split是一个

block大小。

读取数据文件时,RDD的Paritition个数默认与Split个数相同,也可以在创建RDD的时候指

定,Partition是分布在不同节点上的。

RDD虽然叫做数据集,但实际上不存储数据,RDD类似迭代器,对象不可变,处理数据时,

下游RDD会依次向上游RDD获取对应数据,这就是RDD之间为什么有依赖关系的原因。

如果RDD中数据类型为二元组对象,那么这种RDD我们称作K,V格式的RDD。

RDD的弹性体现在RDD中Partition个数可以由用户设置、RDD可以根据依赖关系基于上一个

RDD按照迭代器方式计算出下游RDD。

RDD提供最佳计算位置,task发送到相应的partition节点上处理数据,体现了“计算移动,

数据不移动”的理念。

3.1.2

RDD创建方式

在Spark中创建RDD可以通过读取集合、读取文件方式创建,还可以基于已有RDD转换创建,后

续我们主要使用第三种方式,这里先介绍前两种方式。下面分别使用Java和Scala

API演示RDD的

创建。

Java

API

SparkConf

conf

=

new

SparkConf();

conf.setMaster(local);

conf.setAppName(generateRDD);

JavaSparkContext

sc

=

new

JavaSparkContext(conf);

//1.从集合中创建RDD,并指定并行度为3,默认并行度为1

Java

文档评论(0)

越来越好 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档