网站防注入怎么办,wordpress连接数据库出错,传媒公司logo设计创意,网站建设与维护本科教材目录 前言 变换算子动作算子 前言 一般来说#xff0c;RDD包括两个操作算子#xff1a; 变换#xff08;Transformations#xff09;#xff1a;变换算子的特点是懒执行#xff0c;变换操作并不会立刻执行#xff0c;而是需要等到有动作#xff08;Actions#xff09;… 目录 前言 变换算子动作算子 前言 一般来说RDD包括两个操作算子 变换Transformations变换算子的特点是懒执行变换操作并不会立刻执行而是需要等到有动作Actions操作的时候才会真正进行计算并显示结果。变换算子主要有map、flatMap、groupByKey和reduceByKey等。 动作Actions动作算子的特点是会立刻执行动作操作会对RDD计算出一个结果并把结果返回到驱动器程序中或把结果存储到外部存储系统如HDFS中。动作算子主要有collect、count、take、top和first等 默认情况下在RDD上执行动作算子时Spark会重新计算并刷新RDD但借助RDD的持久化存储cache和persist方法可以将RDD缓存在内存当中这样后续在RDD上执行动作算子时Spark就不会重新计算和刷新RDD从而显著提高计算速度。
官方文档https://spark.apache.org/docs/latest/api/python/reference/pyspark.html 变换算子
操作调用形式参数说明作用示例glomrdd.glom()将RDD中每一个分区中类型为T的元素转换成Array[T]这样每一个分区就只有一个数组元素coalescerdd.coalesce(numPartitions,[isShuffleFalse])numPartitions重新分区的分区数isShuffle是否在重新分区过程中进行混洗操作将RDD进行重新分区repartitionrdd.repartiton(numParttions)numPartitions重新分区的分区数coalesce()方法shuffle为true的情况combineByKeyrdd.combineByKey(createCombiner, mergeValue,mergeCombiners,[partitioner], [mapSideCombiner], [serializer])createCombiner 将 Value 进行初步转换mergeValue 在每个分区把上一步转换的结果聚合mergeCombiners 在所有分区上把每个分区的聚合结果聚合partitioner 可选, 分区函数mapSideCombiner 可选, 是否在 Map 端 Combineserializer 序列化器对数据集按照Key进行聚合PySpark之Spark中的CombineByKeydistinctrdd.distinct()duid去重即多个重复元素只保留一个filterrdd.filter(func)func过滤函数根据过滤函数func的逻辑含义对原RDD中的元素进行过滤并返回一个新的RDD其由满足过滤函数的True的元素构成flatMaprdd.flatMap(func)func:定义的函数名对RDD中每个元素按照func函数定义的处理逻辑进行操作并将结果扁平化flatMapValuesrdd.flatMapValues(func)func定义的函数对RDD元素格式为KV对中的V进行func定义的逻辑处理Value中每一个元素被输入函数func映射为一系列的值然后这些值再与原RDD中的Key组成一系列新的KV对并将结果进行扁平化处理foldrdd.fold(value,func)value设定的初始值对RDD每个元素按照func定义的逻辑进行处理。func包含两个参数a,b其中a的初始值为value后续代表累计值b代表当前元素值。spark的fold函数理解foldByKeyrdd.foldByKey(value,func)value设定的初始值此操作作用于元素为KV格式的RDD。它的作用是对RDD每个元素按照Key进行func定义的逻辑进行处理。func包含两个参数a,b其中a的初始值为value后续代表累计值而b代表的是当前元素值。foreachrdd.foreach(func)对RDD每个元素按照func定义的逻辑进行处理。foreachPartitionrdd.foreachPartition(func)对RDD每个分区中的元素按照func定义的逻辑进行处理maprdd.map(func,preservesPartitioningFalse)对RDD每个元素按照func定义的逻辑进行处理它在统计单词个数等场景下经常使用mapPartitionsrdd.mapPartitions(func,preservesPartitioningFalse)对RDD每个分区中的元素按照func定义的逻辑进行处理并分别返回值mapValuesrdd.mapValues(func)对KV格式的RDD中的每个元素应用函数func这个过程汇总不会更改键K同时也保留了原始RDD的分区即返回新的RDDgroupByrdd.groupBy(func,numPartitionsNone,partitionFuncfunction portable_hashfunction portable_hash)它接收一个函数func这个函数返回的值作为Key然后通过这个Key来对其中的元素进行分组并返回一个新的RDD对象(返回的RDD中是KV格式的数据其中V是一个迭代对象因此需要遍历进行元素访问。)goupyByKeyrdd.groupByKey(numPartitionsNone,partitionFuncfunction portable_hashfunction portable_hash)将RDD中每个键的值分组为单个序列用numPartitions分区对生成的RDD进行哈希分区并返回一个新的RDD对象keyByrdd.keyBy(func)在RDD上应用函数func其中将原有RDD中的元素作为Key该Key通过func函数返回的值作为Value创建一个元组并返回一个新的RDD对象keysrdd.keys()获取KV格式的RDD中的Key序列并返回一个新的RDD对象ziprdd.zip(oterRdd)将第一个RDD中的元素作为Key第二个RDD对应的元素作为Value组合成元素格式为元组的新RDD。这两个参与运算的RDD元素个数应该相同。zipWithIndexrdd.zipWithIndex()是将RDD中的元素作为Key, Key对应的元素索引作为Value组合成元素格式为元组的新RDDvaluesrdd.values()获取KV格式的RDD中的Value序列并返回一个新的RDD对象unionrdd.union(oterRDD)将第一个RDD中的元素与第二个RDD对应的元素进行合并返回新RDDtakeOrderedrdd.takeOrdered(num,keyNone)num获取的元素个数key排序依据从RDD中获取排序后的前num个元素构成的RDD默认按照升序对元素进行排序但也支持用可选函数进行指定takeSamplerdd.takeSample(withReplacement,num,seedNone)withReplacement布尔值代表元素是否可以多次抽样num代表抽样的样本数量seed代表随机数生成器的种子从RDD中抽样出固定大小的子数据集合返回新的RDDsubtrackrdd.subtract(otherRDD,numPartitionsNone)numPartitons可选用于指定产生的差集RDD的分区数从RDD中排除掉otherRDD中的元素并返回一个新的RDDsubtractByKeyrdd.subtractByKey(otherRDD,numPartitionsNone)numPartitons可选用于指定产生的差集RDD的分区数从元素为KV格式的RDD中排除掉otherRDD中的元素只要两个RDD的元素Key一致则排除并返回一个新RDDsortByrdd.sortBy(keyfunc,ascendingTrue,numPartitionsNone)根据函数keyfunc来对RDD对象元素进行排序并返回一个新的RDDsortByKeyrdd.sortByKey(ascendingTrue, numPartitionsNone, keyfuncfunction RDD.lambdalambda)keyfunc可选不提供则按照RDD中元素的key进行排序针对元素格式为KV的RDD根据函数keyfunc来对RDD对象元素进行排序并返回一个新的RDDsamplerdd.sample(withReplacement,fraction,seedNone)withReplacement布尔值用于表示在采样过程中是否可以对同一个元素进行多次采样fraction数值在[0,1]之间指定抽样的比例seed随机数生成器的种子对数据按照指定的比例进行抽样并不精确例如100个元素的0.2不一定就是20个可能存在偏差。reducerdd.reduce(func)以按照函数func的逻辑对RDD中的元素进行运算以减少元素个数(不能在空RDD上操作会报ValueError错误reduceByKeyrdd.reduceByKey(func,numPartitionsNone,partitionFuncfunction partable_hash)按照函数func的逻辑对元素格式为KV的RDD中的数据进行运算以减少元素个数randomSplitrdd.randomSplit(weights,seedNone)weights随机分割的权重按照权重weights对RDD进行随机分割并返回多个RDD构成的列表lookuprdd.lookup(key)key指定的查找键值根据key值从RDD中查找到相关的元素返回RDD中键值的值列表joinrdd.join(otherRDD,numPartitionsNone)返回一个RDD其中包含自身和otherRDD匹配键的所有成对元素。每对元素将以(k,(v1,v2))元组返回其中(k,v1)在自身中而(k,v2)在另一个otherRDD中intersectionrdd.intersection(otherRDD)返回一个此RDD和另一个otherRDD的交集在这个过程中会进行去重操作fullOuterJoinrdd.fullOuterJoin(otherRDD,numPartitionsNone)对于RDD自身中的每个元素(k,v)如果另外一个otherRDD匹配到k那么生成的RDD元素格式为(k,(v,w))如果另外一个otherRDD匹配不到k则生成的RDD元素格式为(k,(v,None))。同样地在otherRDD匹配到k的值但是在RDD自身没有匹配到值w则返回None即生成的RDD元素格式为(k,(None,w))。leftOuterJoinrdd.leftOuterJoin(otherRDD,numPartitionsNone)返回此RDD和另一个otherRDD的左外部连接left outer join。对于RDD自身中的每个元素(k,v)如果另外一个otherRDD匹配到k那么生成的RDD元素格式为(k,(v,w))如果另外一个otherRDD匹配不到k则生成的RDD元素格式为(k,(v,None))。rightOuterJoinrdd.rightOuterJoin(otherRDD,numPartitionsNone)返回此RDD和另一个otherRDD的右外部连接left outer join。aggregateByKeyrdd.aggregateByKey(zeroValue,seqFunc,combFunc,numPartitionsNone,partitionFuncfunction partable_hash)zeroValue代表每次按Key分组之后的每个组的初始值。seqFunc函数用来对每个分区内的数据按照key分别进行逻辑计算。combFunc对经过seqFunc处理过的数据按照key分别进行逻辑计算。cartesianrdd.cartesian(oterRDD)返回自身元素和另外一个otherRDD中元素的笛卡尔积
动作算子
操作调用形式参数说明作用示例firstrdd.first()获取到RDD中的一个元素maxrdd.max()获取到RDD中最大的一个元素minrdd.min()获取到RDD中最小的一个元素sumrdd.sum()获取到RDD中元素的和takerdd.take(n)n代表获取的元素个数获取到RDD中指定的前n个元素toprdd.top(n)n代表获取的元素个数获取到RDD中排序后的前n个元素countrdd.count()获取到RDD中元素的个数collectrdd.collect()将RDD类型的数据转化为数组同时会从集群中拉取数据到driver端collectAsMaprdd.collectAsMap()与collect操作类似但适用于键值RDD并将它们转换为Map映射以保留其键值结构countByKeyrdd.countByKey()统计RDD[K,V]中每个K的数量字典形式返回各键的统计数量情况countByValuerdd.countByValue()统计RDD中各个Value出现的次数并返回一个字典。字典的K为元素的值而V是出现的次数statsrdd.stats()给出RDD数据的统计信息包括计数、均值、方差、最大值和最小值返回的是一个StatCounter对象aggregaterdd.aggregate(zeroValue,seqOp,combOp)zeroValue初始值,形式是(x,y)seqOp函数是对每个分区上的数据信息操作combOp函数对每个分区的计算结果再进行合并操作使用给定的seqOp函数和给定的零值zeroValue来聚合每个分区上的元素然后再用combOp函数和给定的零值zeroValue汇总所有分区的结果。cacherdd.cache()在RDD对象上进行缓存操作后续的RDD操作会直接从内存中加载数据进行计算。使用默认存储级别MEMORY_ONLY保留该RDD防止多次进行创建从而提高效率。persistrdd.persist(storageLevel)storageLevel:指定缓存的存储级别在RDD对象上按照指定的存储级别进行缓存操作saveAsTextFilerdd.saveAsTextFile(path,compressionCodecClassNone)path代码保存的文件路径compressionCodecClass用于压缩默认为“org.apache.hadoop.io.compress.GzipCodec”保存RDD对象为一个文件其中元素以字符串的形式体现。 参考文档
https://spark.apache.org/docs/latest/api/python/reference/pyspark.html《Python大数据处理库PySpark实战》