Spark入门学习——要点2
2018-09-14 16:53
405 查看
1、PairRDD的转换操作
Pair RDD的转化操作(以键值对集合{(1, 2), (3, 4), (3, 6)}为例)函数名 | 目的 | 示例 | 结果 |
reduceByKey(func) | 合并具有相同键的值 | rdd.reduceByKey((x, y) => x + y) | {(1,2), (3,10)} |
groupByKey() | 对具有相同键的值进行分组 | rdd.groupByKey() | {(1,[2]),(3, [4,6])} |
combineByKey( createCombiner,mergeValue, mergeCombiners,partitioner) | 使用不同的返回类型合并具有相同键的值 | ||
mapValues(func) | 对pair RDD 中的每个值应用一个函数而不改变键 | rdd.mapValues(x => x+1) | {(1,3), (3,5), (3,7)} |
flatMapValues(func) | 对pair RDD 中的每个值应用一个返回迭代器的函数,然后对返回的每个元素都生成一个对应原键的键值对记录。通常用于符号化 | rdd.flatMapValues(x => (x to 5)) | {(1,2), (1,3), (1,4), (1, 5), (3,4), (3,5)} |
keys() | 返回一个仅包含键的RDD | rdd.keys() | {1,3,3} |
values() | 返回一个仅包含值的RDD | rdd.values() | {2,4,6} |
sortByKey() | 返回一个根据键排序的RDD | rdd.sortByKey() | {(1,2), (3,4), (3,6)} |
subtractByKey | 删掉RDD 中键other RDD 中的键相同的元素 | rdd.subtractByKey(other) | {(1, 2)} |
join | 对两个RDD 进行内连接 | rdd.join(other) | {(3, (4, 9)), (3,(6, 9))} |
2、combineByKey()
combineByKey() 是最为常用的基于键进行聚合的函数。大多数基于键聚合的函数都是用它实现的。和aggregate() 一样,combineByKey() 可以让用户返回与输入数据的类型不同的返回值。要理解combineByKey(), 要先理解它在处理数据时是如何处理每个元素的。由于combineByKey() 会遍历分区中的所有元素,因此每个元素的键要么还没有遇到过,要么就和之前的某个元素的键相同。如果这是一个新的元素,combineByKey() 会使用一个叫作createCombiner() 的函数来创建那个键对应的累加器的初始值。需要注意的是,这一过程会在每个分区中第一次出现各个键时发生,而不是在整个RDD 中第一次出现一个键时发生。如果这是一个在处理当前分区之前已经遇到的键,它会使用mergeValue() 方法将该键的累加器对应的当前值与这个新的值进行合并。由于每个分区都是独立处理的,因此对于同一个键可以有多个累加器。如果有两个或者更多的分区都有对应同一个键的累加器,就需要使用用户提供的mergeCombiners() 方法将各个分区的结果进行合并。3、RDD分区:
RDD的都有固定数目的分区,分区数决定了在RDD上面执行操作时的并行度。在执行聚合操作或分组操作的时候,可以要求Spark使用给定的分区数。Spark始终尝试根据集群的大小来推算一个有意义的默认值,但是有时候需要你自己对并行度进行调整来获取到更好的性能表现。对于除了分组和聚合操作之外,我们还想改变RDD的分区,可以通过repartition()函数,函数会进行网络数据混洗,并创建出新的分区。、4、使用partitionBy()函数需要进行持久化
使用partitionBy()函数需要进行持久化,不进行持久化的话,后面每次使用到这个RDD都会进行重新分区,导致整个RDD谱系重新计算,抵消partitionBy()分区带来的好处。RDD一旦被创建即不可修改,只能创建出新的RDD。Spark的许多操作都引入了将数据根据键跨节点进行混洗的过程。所有这些操作都会从分区中进行收益。就Spark1.0而言,收益的操作有groupWith(),cogroup(),join(),leftOuterJoin(),groupByKey(),reduceByKey(),CombineByKey()以及loopup()。相关文章推荐
- Spark入门学习——要点3
- Spark入门学习——要点1
- JAVA入门--语言学习六大要点
- spark学习笔记总结-spark入门资料精化
- 【转载】Spark学习——入门
- 菜鸟入门Java程序学习的要点 (2012-08-14 11:23:00)
- Spark入门学习记录之SparkLearning
- Spark入门学习
- Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)
- Spark 学习入门教程
- spark 最新版1.0本地模式安装_spark入门学习一
- [spark学习]之spark shell 入门
- 二级经验心得:菜鸟入门Java语言学习的要点
- Spark2.x学习笔记:13、Spark SQL快速入门
- 菜鸟入门:Java语言学习六大要点
- 深度学习Deeplearning4j 入门实战(2):Deeplearning4j 手写体数字识别Spark实现
- Spark入门学习
- 菜鸟入门:Java语言学习六大要点
- Spark2.x学习笔记:1、Spark2.2快速入门(本地模式)
- Spark 学习入门教程