网站首页 > 技术文章 正文
转换(Transformation)算子就是对RDD进行操作的接口函数,其作用是将一个或多个RDD变换成新的RDD。
使用Spark进行数据计算,在利用创建算子生成RDD后,数据处理的算法设计和程序编写的最关键部分,就是利用变换算子对原始数据产生的RDD进行一步一步的变换,最终得到期望的计算结果。
对于变换算子可理解为分两类:
1,对Value型RDD进行变换的算子;
2,对Key/Value型RDD进行变换算子。
在每个变换中有仅对一个RDD进行变换的,也有是对两个RDD进行变换的。
对单个Value型的RDD进行变换
map
filter
distinct
flatMap
sample
union
intersection
groupByKey
上面列出的几个RDD变换在之前文章已有分享过,在这就不重复。下面主要是对先前没有分享的RDD算子笔记。Spark系列之RDD操作(一)
coalesce——重新分区
将当前RDD进行重新分区,生成一个以numPartitions参数指定的分区数存储的新RDD。参数shuffle为true时在变换过程中进行shuffle操作,否则不进行shuffle。
def coalesce(numPartitions: Int, shuffle: Boolean = false, partitionCoalescer: Option[PartitionCoalescer] = Option.empty)(implicit ord: Ordering[T] = null): RDD[T]
pipe——调用Shell命令
# Return an RDD created by piping elements to a forked external process. def pipe(command: String): RDD[String]
在Linux系统中,有许多对数据进行处理的shell命令,我们可能通过pipe变换将一些shell命令用于Spark中生成新的RDD。
sortBy——排序
对原RDD中的元素按照函数f指定的规则进行排序,并可通过ascending参数进行升序或降序设置,排序后的结果生成新的RDD,新的RDD的分区数量可以由参数numPartitions指定,默认与原RDD相同的分区数。
# Return this RDD sorted by the given key function.
对两个Value型RDD进行变换
cartesian——笛卡尔积
输入参数为另一个RDD,返回两个RDD中所有元素的笛卡尔积。
def cartesian[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]
subtract——补集
输入参数为另一个RDD,返回原始RDD与输入参数RDD的补集,即生成由原始RDD中而不在输入参数RDD中的元素构成新的RDD,参数numPartitions指定新RDD分区数。
#Return an RDD with the elements from this that are not in other. def subtract(other: RDD[T], numPartitions: Int): RDD[T]
union——并集
返回原始RDD与另一个RDD的并集。
# Return the union of this RDD and another one. def union(other: RDD[T]): RDD[T] def ++(other: RDD[T]): RDD[T]
zip——联结
生成由原始RDD的值为Key,另一个RDD的值为Value依次配对构成的所有Key/Value对,并返回这些Key/Value对集合构成的新RDD
对Key/Value型RDD进行变换
对单个Key-Value型RDD进行变换
combineByKey——按Key聚合
def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C): RDD[(K,
flatMapValues——对所有Value进行flatMap
def flatMapValues[U](f: (V) =>TraversableOnce[U]): RDD[(K, U)]
keys——提取Key
将Key/Value型RDD中的元素的Key提取出来,所有Key值构成一个序列形成新的RDD。
# Return an RDD with the keys of each tuple. def keys: RDD[K]
mapValues——对Value值进行变换
将Key/Value型RDD中的元素的Value值使用输入参数函数f进行变换构成一个新的RDD。
# Pass each value in the key-value pair RDD through a map function without changing the keys; # this also retains the original RDD's partitioning. def mapValues[U](f: (V) => U): RDD[(K, U)]
partitionBy——按Key值重新分区
def partitionBy(partitioner: Partitioner): RDD[(K, V)] #Return a copy of the RDD partitioned using the specified partitioner.
reduceByKey——按Key值进行Reduce操作
def reduceByKey(func: (V, V) => V): RDD[(K, V)]
sortByKey——按Key值排序
values——取得value值构成新的RDD
对两个Key-Value型RDD进行变换
cogroup——按Key值聚合
join——按Key值联结
leftOuterJoin——按Key值进行左外联结
rightOuterJoin——按Key值进行右外联结
subtractByKey——按Key值求补
猜你喜欢
- 2024-10-12 大佬用10小时就把Spark讲完了,附6大技术文档
- 2024-10-12 浅析图数据库 Nebula Graph 数据导入工具——Spark Writer
- 2024-10-12 Spark Streaming 和 Flink 谁是数据开发者的最爱?
- 2024-10-12 分享几点 Spark Streaming 调优实践经验
- 2024-10-12 大数据学习之计算天下——SPARK的那些事
- 2024-10-12 第二篇|Spark core编程指南 spark编程软件
- 2024-10-12 Spark计算引擎 spark是基于什么计算引擎
- 2024-10-12 Spark Shuffle机制 sparkshuffle原理
- 2024-10-12 一文带你了解SparkStreaming窗口函数
- 2024-10-12 深度预警:Spark运行原理 简述spark的运行架构和原理
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)