继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

RDD的转化与行为

松花
关注TA
已关注
手记 19
粉丝 94
获赞 669

一、基本的RDD操作

1.RDD的转化操作

表1-1:对数据为{1,2,3,3}的RDD进行基本的转化操作

函数

目的

实例

结果

map()

将函数应用于RD'D中的每个元素

rdd.map(x=>x+1)

{2,3,4,4}

flatMap()

将函数应用于RD'D中的每个元素,将返回的迭代器的所有内容构成新的RDD

rdd.flatMap(x=>x.to(3))

{1,2,3,2,3,3,3}

filter()

过滤

rdd.filter(x=>x!=1)

{2,3,3}

distinct()

去重

rdd.distinct()

{1,2,3}

sample(withReplacement,fraction,[seed])

采样,以及是否替换

rdd.sample(false,0.5)

非确定


表1-2:对数据{1,2,3},{3,4,5}的RDD进行转化操作

函数

目的

示例

结果

union()

并集

rdd.union(other)

{1,2,3,3,4,5}

intersection()

交集

rdd.intersection(other)

{3}

subtract()

移除一个 RDD 中的内容(差集)

rdd.substract(other)

{1,2}

cartesian()

笛卡儿积

rdd.cartesian(other)

{(1,3),(1,4),(1,5),(2,3),(2,4),(2,5),(3,3),(3,4),(3,5)}


2.RDD行为操作

表1-3:对{1,2,3,3}的RDD进行操作

函数

目的

示例

结果

collect()

返回RDD中的所有元素

rdd.collect()

{1,2,3,3}

count()

计数

rdd.count()

4

countByValue()

各元素在RDD中出现的次数

rdd.countByValue()

{(1,1),(2,1),(3,2)}

take(n)

返回n个元素

rdd.take(2)

{1,2}

top(n)

返回最前面的n个元素

rdd.top(2)

{3,3}

takeOrdered(n)(ordering)

按照提供的顺序返回前n个元素

rdd.takeOrdered(2)(myOrdering)

{3,3}

takeSample(withReplacement,num,[seed])

返回任意一些元素

rdd.takeSample(false,1)

非确定的

reduce()

归并

rdd.reduce(_+_)

9

fold()()

类似于reduce,但需要初始值

rdd.fold(0)(_+_)

9

aggregate(zeroValue)(seqOp,combOp)

和 reduce() 相似,但是通常 返回不同类型的函数rdd.aggregate((0, 0)) ((x, y) => (x._1 + y, x._2 + 1), (x, y) => (x._1 + y._1, x._2 + y._2))(9,4)

foreach()

对 RDD 中的每个元素使用给 定的函数

rdd.foreach(func)

-

二、pairRDD的操作

1.pairRDD的转化操作

表2-1:以{(1,2),(3,4),(3,6)}为例

函数

目的

示例

结果

reduceByKey()

合并具有相同键的值

rdd.reduceByKey(_+_)

{(1,2),(3,10)}

groupByKey()

对具有相同键的值进行分组

rdd.groupByKey()

{(1,[2]),(3,[4,6])}

combinByKey(createCombiner,

mergeValue,mergeCombiners,partitioner)

使用不同的返回类型合并具有相同键的值

-

-

mapValues(func)

对V应用func

rdd.mapValues(x=>x+1)

{(1,3),(3,5),(3,7)}

flatMapValues()

对V应用func(该func返回迭代器),然后对返回的每一个元素都生成一个对应原键的键值对

rdd.flatMapValues(x=>(x to 5))

{(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)}

keys()

返回仅包含键的RDD

rdd.keys()

{1,3,3}

values()

返回仅包含值的RDD

rdd.values()

{2,4,6}

sortByKey()

返回根据键排序的RDD

rdd.sortByKey()

{(1,2),(3,4),(3,6)}

表2-2:rdd=>{(1,2),(3,4),(3,6)} other=>{(3,9)}

函数

目的

示例

结果

subtractByKey

删掉rdd中键与other中键相同的元素

rdd..subtractByKey(other)

{(1,2)}

join

内链接

rdd.join(other)

{(3,(4,9)),(3,(6,9))}

rightOuterJoin

右外连接

rdd.rightOuterJoin(other)

{(3,(Some(4),9)),(3,(Some(6),9))}

leftOuterJoin

左外连接

rdd.leftOuterJoin(other)

{(1,(2,None)),(3,(4,Some(9))),(3,(6,Some(9)))}

cogroup

将两个RDD中有相同键的数据放到一起

rdd.cogroup(other)

{(1,([2],[])),(3,([4,6],[9]))}

2.pairRDD的行为操作

表2-3:rdd=>{(1,2),(3,4),(3,6)

函数

目的

示例

结果

countByKey()

对每个键对应的元素分别计数

rdd.countByKey()

{(1,1),(3,2)}

collectAsMap()

将结果以映射表的形式返回

rdd.collectAsMaop()

Map{(1,2),(3,4),(3,6)}

lookup(key)

返回给定键对应的所有值

rdd.lookup(3)

[4,6]

【注】本文参考《Spark快速大数据分析》


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP