Spark RDD介绍和应用

啥?RDD?

相信有小伙伴第一次看到这个名词的时候也是一脸懵逼,我先不说话,静静看着官网的解释:

Resilient Distributed Datasets (RDD) is a fundamental data structure of Spark. It is an immutable distributed collection of objects. Each dataset in RDD is divided into logical partitions, which may be computed on different nodes of the cluster. RDDs can contain any type of Python, Java, or Scala objects, including user-defined classes.
RDD是Spark的基本数据结构。它是一个不可修改的对象集合。每一个在RDD里面的dataset都被切分成不同的partition,这些partitions会在集群的不同节点中计算。RDD们包含了Python或者Java或者Scala的对象,包括用户自定义对象。

一句话,RDD就是一个对象dataset(我的理解,欢迎更正)。

先抛开RDD不说,Spark将所有的复杂逻辑都封装在底层了,并且能让你的数据处理过程具有弹性,高容错的性质。
如果一个在某一个node(节点)这个process挂了,那么此时Spark可以返回最近的一个正常的节点然后通知你,“嘿,这里挂了,想想办法,数据我先退回上一步,没事的bro,you got me...”

so that end of the day an RDD is just a giant set of data basically row after row after row after row of information.
And that can be lines of raw text or can be key value informations
(says our prof.)

Spark Context

上下文?
小伙伴:你是不是又要说Hadoop?
我:……嗯
Hadoop的context跟这个Spark Context 差不多(我自己感觉,欢迎指正),都是一个MR所运行的上下文。
但是Spark Context需要我们自己去创建,而Hadoop的只需要我们作为参数传入,底层的包会帮我们把这些处理好。
这个SC(Spark Context)做了什么

  • 创建Driver App
  • 对你的RDD的弹性+分布特性负责
  • 创建RDD
    当然,这个SC是底层的SparkCore实现的。
    上代码:
# 在spark shell中运行的哦,一些示例而已
# line 1
> val nums = parallelize(List(1,2,3,4))
> sc.textFile('hdfs://hadoopserver/file/path')
> hiveCtx = HiveContext(sc)
# or > rows = hiveCtx.sql("SELECT name, age FROM users")

看到了吧,数组,文件,还有Hive都可以处理,看起来是极好的。

RDD Transformation

说起transformation(咳咳,这里不说Hadoop了),熟悉python和Rlang的小伙伴!有福了!基本上差不多!如果你用过numpy或者pandas或者r语言!
一共有好几种transformation:

  • map(func)
  • flatMap(func)
  • filter(func)
  • distinct([numverPartitions])
  • sample(withReplacement, fraction, seed)
  • union, intersection, subtract, cartesian (和Apache pig很像)

map

map就是普通的MR中的map,比如一个数据表,line by line,一行一行的映射,然后map return给我们的是一个新的RDD。
这个RDD和你map的RDD是一行一行对应的。比如rddA -> rddB, 那么rddA和rddB的数据量是相同的。

val rdd = sc.parallelized(List(1,2,3,4))
val squares = rdd.map(x => x*x) // 这里有点像java的lambda对不对
// 1, 4, 9, 16

flatmap

flatmap也是map的一种,但是非一行一行映射。
如果你有原始数据集rddA,结果数据集rddB,那么rddB和rddA数据量不一定相同,可以在flatmap里面执行trim down的操作。

filter

与flatmap相似,filter接受的是一个boolean值。返回的也是一个trim down的RDD

disitinct

获取独一值得RDD

sample

获取一个随机的sample数据集。
我觉得这个在做测试的时候还是挺有用的。

RDD Actions

Action是一个重头戏。为啥?
因为Spark只有在action触发的时候,才会真正的运算并且返回结果!
好比说你上了高速,服务区是你的Transformation(可以让你肚子里多点东西),但是到了收费站才是Action(说明到了,),才真正到达目的。
可能不太准确哈……勿喷……
大致通常会用到的actions:

  • collect
  • count
  • take(n)
  • top
  • reduce
  • ... and more ...

collect

开始让Spark回到你的Driver App。
return你的最终的RDD。
但是不要用!!, 因为返回的是整个数据集RDD!除非你的RDD不是big data。

count

返回dataset的元素的个数

take(n)

返回一个长度为n的数组。有n个dataset的元素。

reduce(func)

这是很重要的一个方法,对应了Transformation的map方法。
所以我们看到,在运行map的时候,Spark其实不启动计算,直到reduce出现,然后开始回到Driver,然后通过DAG(有向无环图,以后说)找出最优路径,然后把reduce结果聚合,返回。

总结一下

  • RDD是一个高容错,高弹性的数据集。
  • RDD在Spark中有两种运行类型,Transformation 和 Action
  • Transformation不触发Spark的运算
  • Action才出发Spark运算
  • 通常是 Transformation -> Transformation -> Actions, 然后给出结果
  • DAG是实现RDD Transformation 和 Actions的核心概念。
  • 是的这篇没有啥代码,都是理论,记住RDD是个数据集就行了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352