欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-06-23
一、概念

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()4countByValue()返回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)Nondeterministicreduce(func)并行合并RDD中的元素rdd.reduce((x, y) => x + y)9fold(zeroValue)(func)提供一个初始值,并根据函数合并RDD当中的元素(首先合并每个分区内的元素,然后合并分区间的元素)rdd.fold(3)((x, y) => x + y)8分区值为36, 1个分区值为15aggregate(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

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。