Spark计算框架(基础RDD行动和变换)

一、概念

  • RDD:弹性分布式数据集,简单来说就是元素的分布式集合,在Spark中,所有的工作都被表达为创建新的RDD,对已存在的RDD做变换,或者对RDD调用行动来计算得到一个结果

  • 变换:指对RDD进行一次操作,生成另外一个RDD的过程

  • 行动:指对RDD进行一次操作,返回一个计算结果的过程

二、变换算子

  • 针对一个包含{1, 2, 3, 3}的RDD进行基本的变换

创建该RDD:

val rdd = sc.parallelize(Array(1, 2, 3, 3))
函数名目的示例结果
map()应用函数到RDD中的每一个元素,并返回一个结果RDDrdd.map(x=>x+1){2, 3, 4, 4}
flatMap()应用到RDD中的每一个元素,并且返回一个返回迭代器中内容的RDD, 一般用于提取单词rdd.flatMap(_.to(3)){1, 2, 3, 2, 3, 3, 3}
filter()返回由仅通过传入filter()的条件的元素组成的RDDrdd.filter(_ > 2){3, 3}
distinct()去重rdd.distinct(){1, 2, 3}
Sample(withReplacement, fraction, [seed])RDD 采样数据,可替换rdd.sample(false, 0.5)Nondeterministic

替换采样:抽取一次之后放回数据,非替换采样:抽取一次之后不放回,后续不会再抽出该条数据

  • 针对包含{1, 2, 3} 和 {3, 4, 5} 的两个RDD 进行变换

创建以上两个RDD:

val rdd = sc.parallelize(Array(1, 2, 3))
val other = sc.parallelize(Array(3, 4, 5))
函数名目的示例结果
union()生成一个新的RDD包含两个RDD当中的所有元素rdd.union(other){1, 2, 3, 3, 4, 5}
intersection()生成一个RDD包含两个RDD中都有的元素rdd.intersection(other){3}
subtract()从一个RDD中去掉另一个RDD中存在的元素rdd.subtract(other){1, 2}
cartesian()生成两个RDD的笛卡尔积的RDDrdd.cartesian(other){(1,3), (1,4), (1,5), (2,3), (2,4), (2,5), (3,3), (3,4), (3,5)}

三、行动算子

  • 对包含{1, 2, 3, 3}的RDD执行动作
函数名目的示例结果
collect()返回RDD中的所有元素rdd.collect(){1, 2, 3, 3}
count()返回RDD当中的元素个数rdd.count()4
countByValue()返回RDD中每个元素出现的次数rdd.countByValue(){(1, 1), (2, 1), (3, 2)}
take(num)返回RDD中num个元素rdd.take(2){1, 2}
top(num)返回RDD当中前num个元素rdd.top(2){3, 3}
takeSample(withReplacement, num, [seed])随机返回RDD中的num个元素rdd.takeSample(false, 1)Nondeterministic
reduce(func)并行合并RDD中的元素rdd.reduce((x, y) => x + y)9
fold(zeroValue)(func)提供一个初始值,并根据函数合并RDD当中的元素(首先合并每个分区内的元素,然后合并分区间的元素)rdd.fold(3)((x, y) => x + y)8分区值为36, 1个分区值为15
aggregate(zeroValue)(seqOp, combOp)提供一个初始值,和两个函数,第一个函数用于分区内元素合并,第二个函数用于分区间元素合并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(func)对RDD中的每个元素应用函数funcrdd.foreach(func)Nothing
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值