开发者社区> 问答> 正文

Spark 都有什么算子?

Spark 都有什么算子?

展开
收起
愚笨如你 2020-02-14 19:56:52 1513 0
2 条回答
写回答
取消 提交回答
  • 官方文档上列举共有32种常见算子,包括Transformation的20种操作和Action的12种操作。

    Transformation:

    1.map

    map的输入变换函数应用于RDD中所有元素,而mapPartitions应用于所有分区。区别于mapPartitions主要在于调用粒度不同。如parallelize(1 to 10, 3),map函数执行10次,而mapPartitions函数执行3次。

    2.filter(function)

    过滤操作,满足filter内function函数为true的RDD内所有元素组成一个新的数据集。如:filter(a == 1)。

    3.flatMap(function)

    map是对RDD中元素逐一进行函数操作映射为另外一个RDD,而flatMap操作是将函数应用于RDD之中的每一个元素,将返回的迭代器的所有内容构成新的RDD。而flatMap操作是将函数应用于RDD中每一个元素,将返回的迭代器的所有内容构成RDD。

    flatMap与map区别在于map为“映射”,而flatMap“先映射,后扁平化”,map对每一次(func)都产生一个元素,返回一个对象,而flatMap多一步就是将所有对象合并为一个对象。

    4.mapPartitions(function)

    区于foreachPartition(属于Action,且无返回值),而mapPartitions可获取返回值。与map的区别前面已经提到过了,但由于单独运行于RDD的每个分区上(block),所以在一个类型为T的RDD上运行时,(function)必须是Iterator => Iterator 类型的方法(入参)。

    5.mapPartitionsWithIndex(function)

    与mapPartitions类似,但需要提供一个表示分区索引值的整型值作为参数,因此function必须是(int, Iterator )=>Iterator 类型的。

    6.sample(withReplacement, fraction, seed)

    采样操作,用于从样本中取出部分数据。withReplacement是否放回,fraction采样比例,seed用于指定的随机数生成器的种子。(是否放回抽样分true和false,fraction取样比例为(0, 1]。seed种子为整型实数。)

    7.union(otherDataSet)

    对于源数据集和其他数据集求并集,不去重。

    8.intersection(otherDataSet)

    对于源数据集和其他数据集求交集,并去重,且无序返回。

    9.distinct([numTasks])

    返回一个在源数据集去重之后的新数据集,即去重,并局部无序而整体有序返回。

    10.groupByKey([numTasks])

    在一个PairRDD或(k,v)RDD上调用,返回一个(k,Iterable )。主要作用是将相同的所有的键值对分组到一个集合序列当中,其顺序是不确定的。groupByKey是把所有的键值对集合都加载到内存中存储计算,若一个键对应值太多,则易导致内存溢出。

    在此,用之前求并集的union方法,将pair1,pair2变为有相同键值的pair3,而后进行groupByKey

    11.reduceByKey(function,[numTasks])

    与groupByKey类似,却有不同。如(a,1), (a,2), (b,1), (b,2)。groupByKey产生中间结果为( (a,1), (a,2) ), ( (b,1), (b,2) )。而reduceByKey为(a,3), (b,3)。

    reduceByKey主要作用是聚合,groupByKey主要作用是分组。(function对于key值来进行聚合)

    12.aggregateByKey(zeroValue)(seqOp, combOp, [numTasks])

    类似reduceByKey,对pairRDD中想用的key值进行聚合操作,使用初始值(seqOp中使用,而combOpenCL中未使用)对应返回值为pairRDD,而区于aggregate(返回值为非RDD)

    13.sortByKey([ascending], [numTasks])

    同样是基于pairRDD的,根据key值来进行排序。ascending升序,默认为true,即升序;numTasks

    14.join(otherDataSet,[numTasks])

    加入一个RDD,在一个(k,v)和(k,w)类型的dataSet上调用,返回一个(k,(v,w))的pair dataSet。

    15.cogroup(otherDataSet,[numTasks])

    合并两个RDD,生成一个新的RDD。实例中包含两个Iterable值,第一个表示RDD1中相同值,第二个表示RDD2中相同值(key值),这个操作需要通过partitioner进行重新分区,因此需要执行一次shuffle操作。(若两个RDD在此之前进行过shuffle,则不需要)

    16.cartesian(otherDataSet)

    求笛卡尔乘积。该操作不会执行shuffle操作。

    17.pipe(command,[envVars])

    通过一个shell命令来对RDD各分区进行“管道化”。通过pipe变换将一些shell命令用于Spark中生成的新RDD,如:

    18.coalesce(numPartitions)

    重新分区,减少RDD中分区的数量到numPartitions。

    19.repartition(numPartitions)

    repartition是coalesce接口中shuffle为true的简易实现,即Reshuffle RDD并随机分区,使各分区数据量尽可能平衡。若分区之后分区数远大于原分区数,则需要shuffle。

    20.repartitionAndSortWithinPartitions(partitioner)

    该方法根据partitioner对RDD进行分区,并且在每个结果分区中按key进行排序。

    Action:

    1.reduce(function)

    reduce将RDD中元素两两传递给输入函数,同时产生一个新值,新值与RDD中下一个元素再被传递给输入函数,直到最后只有一个值为止。

    2.collect()

    将一个RDD以一个Array数组形式返回其中的所有元素。

    3.count()

    返回数据集中元素个数,默认Long类型。

    4.first()

    返回数据集的第一个元素(类似于take(1))

    5.takeSample(withReplacement, num, [seed])

    对于一个数据集进行随机抽样,返回一个包含num个随机抽样元素的数组,withReplacement表示是否有放回抽样,参数seed指定生成随机数的种子。

    该方法仅在预期结果数组很小的情况下使用,因为所有数据都被加载到driver端的内存中。

    6.take(n)

    返回一个包含数据集前n个元素的数组(从0下标到n-1下标的元素),不排序。

    7.takeOrdered(n,[ordering])

    返回RDD中前n个元素,并按默认顺序排序(升序)或者按自定义比较器顺序排序。

    8.saveAsTextFile(path)

    将dataSet中元素以文本文件的形式写入本地文件系统或者HDFS等。Spark将对每个元素调用toString方法,将数据元素转换为文本文件中的一行记录。

    若将文件保存到本地文件系统,那么只会保存在executor所在机器的本地目录。

    9.saveAsSequenceFile(path)(Java and Scala)

    将dataSet中元素以Hadoop SequenceFile的形式写入本地文件系统或者HDFS等。(对pairRDD操作)

    10.saveAsObjectFile(path)(Java and Scala)

    将数据集中元素以ObjectFile形式写入本地文件系统或者HDFS等。

    11.countByKey()

    用于统计RDD[K,V]中每个K的数量,返回具有每个key的计数的(k,int)pairs的hashMap。

    12.foreach(function)

    对数据集中每一个元素运行函数function。

    2020-03-19 19:21:29
    赞同 展开评论 打赏
  • map,reducebykey,filter,mapPartition,flatmap,cogroup,foreach,first,take, join, sortBy,distinct,等等

    2020-02-14 19:57:11
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载