当前位置:   article > 正文

算子的含义_算子 组合 csdn

算子 组合 csdn

 

Transform: 1. map:rdd中的每项数据进行map里的操作后,会形成一个个新的元素的新rdd flatMap:在map的基础上进行扁平化,形成一个新的rdd

2. distinct:转换操作,去重 filter:对rdd中的元素进行过滤 filterByRange:范围过滤,作用于键值对RDD,对RDD中元素进行过滤,返回键在指定范围内的元素

3. union:并集操作,不去重 intersection:交集操作,去重 subtract:类似intersection,返回在rdd中出现并且不在otherRdd中出现的元素 subtractByKey:与subtract类似,只不过这里是针对key的,返回在主RDD中出现并且不在otherRDD中出现的元素

4. join:相当于sql中的内联,只返回两个RDD根据key关联上的结果 leftOuterJoin:相当于sql中的左外关联,返回结果以前面的RDD为主,关联不上的记录为空 rightOuterJoin:相当于sql中的右外关联,返回结果以后面的RDD为主,关联不上的记录为空 cartesian:做笛卡尔积

5. cogroup:将输入的数据集(k,v)和另外的数据集(k,w)进行cogroup,得到的数据集是(k,Seq(v),Seq(w))的数据集 groupBy:接收一个函数,这个函数的返回值作为key,然后通过key对里面的元素进行分组 groupByKey:会对每一个RDD中的value聚合成一个序列,此操作发生在reduce端,所以势必所有的数据 将会通过网络传输,造成不必要的浪费,同时如果数据量十分大,可能还会造成OutOfMemoryError

6. reduceByKey:会在结果发送至reduce之前,会对每个mapper在本地进行merge,有点类似于MapReduce的combiner。 这样做的好处是在map端进行一次reduce之后,数据量会大幅度减小,从而减小传输,保证reduce端能够更快的计算出结果 reduceByKeyLocally:对RDD中的每个k对应的v值根据映射函数来计算,运算结果映射到Map[k,v],而不是RDD[k,v]

7. mapPartitions:与map函数类似,只不过映射函数的参数由RDD的每一个元素变成了RDD中每一个分区的迭代(如果在映射过程中 需要频繁创建额外的对象,使用mapPartitions要比map高效,比如将RDD中所有数据通过JDBC写入数据库,如果使用map, 可能每个元素都要创建一个connection,这样开销很大,如果使用mapPartitions,那么只需要针对每一个分区建立一个connection) mapPartitionsWithIndex:函数作用同mapPartitions,不过提供了两个参数,第一个参数为分区的索引

。 8. zip:用于两个RDD组合成Key/Value形式的RDD,默认两个RDD的partition的数量以及元素的数量相同,否则会抛出异常 zipPartitions:将多个RDD按照partition组合成新的RDD,该函数需要组合的RDD具有相同的分区数,但对于每个分区内的元素数量没有要求(三个参数,大致三类实现)

9. zipWithIndex:将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键值对 zipWithUniqueId:将RDD中的元素和一个唯一ID组合成键值对(该唯一ID生成算法: 每个分区中第一个元素的唯一ID值为:该分区索引号, 每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数))

10. randomSplit:根据weights权重,将一个RDD切分成多个RDD,权重参数是一个Double数组

11. glom:将RDD中每一个分区中类型为T的元素转换成Array[T],这样每个分区就只有一个数组元素

12. coalesce:用于将RDD重新分区,使用HashPartitioner,第一个为重新分区的数目,第二个为是否进行shuffle,默认是false repartition:该函数是coalesce函数的第二个参数为true的实现

13. combineByKey:用于将RDD[K,V]转换成RDD[K,C],V和C的类型可相同可不同 第一个参数x:原封不动的取出来,第二个参数是函数:局部运算,第三个参数是函数:对局部运算后的结果在做运算 每个分区中每个key的value中的第一个值:(hello,1)(hello,1)(good,1)-->(hello(1,1),good(1))-->x就相当于hello的第一个1, good中的1 参数(createCombiner:组合器函数,用于将V类型转换成C类型,输入参数为RDD[K,V]中的V,输出为C mergeValue:合并值函数,将一个C类型和一个V类型值合并成一个C类型,输入参数为(C,V),输出为C mergeCombiners:合并组合器函数,用于将两个C类型值合并成一个C类型,输入参数为(C,C),输出为C numPartitions:结果RDD分区数,默认保持原有的分区数 partitioner:分区函数,默认为HashPartitioner mapSideCombine:是否需要在Map端进行combine操作,类似于MapReduce中的combine,默认为true) foldByKey:该函数用于RDD[K,V]根据K将V做折叠、合并处理,其中的参数zeroValue表示先根据映射函数将zeroValue应用于V, 进行初始化V,再将映射函数应用于初始化后的V. aggregateByKey:aggregate针对于序列操作,aggregateByKey针对于K,V操作,可以先进行局部操作,在进行全局操作 从源码可看出,aggregateByKey调用的就是combinByKey方法

14. partitionBy:根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区

15. mapValues:同map,只不过mapValues针对的是[K,V]中的V进行map操作 flatMapValues:同flatMap,只不过flatMapValues是针对[K,V]中的V值进行flatMap操作,根据V去扁平化

16. foreachRDD:sparkStreaming中的转换算子,处理每一个时间段内的RDD数据。

17. persist:将一个RDD进行缓存,这样以后就不需要再重新计算,大大节省了程序运行时间,可以设置缓存级别 cache:调用了persist,且只有一个MEMORY_ONLY缓存级别

18. sample:抽样,返回RDD的抽样子集,false元素不可以多次抽样,true可以多次 (元素不可以多次抽样:withReplacement=false,每个元素被抽取到的概率为0.5:fraction=0.5 元素可以多次抽样:withReplacement=true,每个元素被抽取到的期望次数为2:fraction=2) takeSample:返回一个Array[T],该方法仅在预期结果数组很小的情况下使用,因为所有数据都被加载到driver的内存中。 (当不可以多次抽样:withReplacement=false;样本个数num大于父本个数时,只能返回父本个数 当不可以多次抽样:withReplacement=false;样本个数num小于父本个数时,返回样本个数 当可以多次抽样:withReplacement=true;样本个数num大于父本个数时,返回样本个数 当不可以多次抽样:withReplacement=true;样本个数num小于父本个数时,返回样本个数) Action: 1. sortBy:排序,有shuffle,默认是true升序,可以按照k或者v进行排序 sortByKey:排序,有shuffle,默认是true升序,按照k进行排序 2. aggregate:用户聚合RDD中的元素,先使用seqOp将RDD中每个分区的T类型元素聚合成U类型,再使用combOp 将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOp和combOp都会使用zeroValue的值,zeroValue的类型为U fold:是aggregate的简化,将aggregate中的seqOp和combOp使用同一个函数Op 3. lookup:用于(K,V)类型的RDD,指定K值,返回RDD中该K对应的所有V值 4. collectAsMap:List集合转成Map集合(List(("a", 1), ("b", 2))=>Map(b -> 2, a -> 1))

5. countByKey:计算key的数量 countByValue:计算value的数量 6. froeach:foreach也是对每个partition中的iterator时行迭代处理,通过用户传入的function(即函数f)对iterator进行内容的处理, 而不同的是,函数f中的参数传入的不再是一个迭代器,而是每次的foreach得到的一个rdd的kv实例,也就是具体的数据 foreachPartition:是对每个partition中的iterator时行迭代的处理.通过用户传入的function(即函数f)对iterator进行内容的处理, 源码中函数f传入的参数是一个迭代器,也就是说在foreachPartiton中函数处理的是分区迭代器,而非具体的数据,不会生成一个新的RDD 7. keys:RDD[K,V],打印key values:RDD[K,V],打印value 8. keyBy:以传入的参数作为key(以单词的第一个字母:rdd

19.keyBy(_ (0)).collect() => ArrayBuffer((d,dog), (s,salmon)) 9. count:返回RDD中的元素数量。 reduce:根据映射函数f,对RDD中的元素进行二元计算,返回计算结果。 collect:用于将一个RDD转换成数组。

10. first:返回RDD中的第一个元素,不排序。 take:用于获取RDD中从0到num-1下标的元素,不排序。 top:用于从RDD中,按照默认(降序)或者指定的排序规则,返回前num个元素。 takeOrdered:和top类似,只不过以和top相反的顺序返回元素。

11. saveAsTextFile:用于将RDD以文本文件的格式存储到文件系统中,只会保存在Executor所在机器的本地目录。 saveAsSequenceFile:用于将RDD以SequenceFile的文件格式保存到HDFS上. saveAsObjectFile:用于将RDD中的元素序列化成对象,存储到文件中。对于HDFS,默认采用SequenceFile保存。

12. saveAsHadoopFile:将RDD存储在HDFS上的文件中,支持老版本Hadoop API,可以指定outputKeyClass、outputValueClass以及压缩格式。 saveAsHadoopDataset:用于将RDD保存到除了HDFS的其他存储中,比如HBase。 (在JobConf中,通常需要关注或者设置五个参数:文件的保存路径、key值的class类型、value值的class类型、RDD的输出格式(OutputFormat)、以及压缩相关的参数。)

13. saveAsNewAPIHadoopFile:用于将RDD数据保存到HDFS上,使用新版本Hadoop API。 saveAsNewAPIHadoopDataset:采用新版本Hadoop API。
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/819598
推荐阅读
相关标签
  

闽ICP备14008679号