Spark基础知识

发布于:2025-04-13 ⋅ 阅读:(34) ⋅ 点赞:(0)

Key-Value类型

 1.partitionBy

函数说明

def partitionBy(partitioner: Partitioner): RDD[(K, V)]

将数据按照指定 Partitioner 重新进行分区。Spark 默认的分区器是 HashPartitioner

2.groupByKey

函数说明

def groupByKey(): RDD[(K, Iterable[V])]

def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]

def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]

将数据源的数据根据 key 对 value 进行分组

3. reduceByKey

 函数说明

def reduceByKey(func: (V, V) => V): RDD[(K, V)]

def reduceByKey(func: (V, V) => V, numPartitions: Int): RDD[(K, V)]

可以将数据按照相同的 Key 对 Value 进行聚合

reduceByKey 和 groupByKey 的区别:

从 shuffle 的角度:reduceByKey 和 groupByKey 都存在 shuffle 的操作, reduceByKey可以在 shuffle 前对分区内相同 key 的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而 groupByKey 只是进行分组,不存在数据量减少的问题,reduceByKey 性能比较高。

从功能的角度:reduceByKey 其实包含分组和聚合的功能。GroupByKey 只能分组,不能聚

合。

4.aggregateByKey

函数说明

def aggregateByKey[U: ClassTag](zeroValue: U)(seqOp: (U, V) => U,

 combOp: (U, U) => U): RDD[(K, U)]

将数据根据不同的规则进行分区内计算和分区间计算

5.aggregateByKey

函数说明

def aggregateByKey[U: ClassTag](zeroValue: U)(seqOp: (U, V) => U,

 combOp: (U, U) => U): RDD[(K, U)]

将数据根据不同的规则进行分区内计算和分区间计算

6. combineByKey

 函数说明

def combineByKey[C](

 createCombiner: V => C,//将当前值作为参数进行附加操作并返回

 mergeValue: (C, V) => C,// 在分区内部进行,将新元素V合并到第一步操作得到的C中

 mergeCombiners: (C, C) => C): RDD[(K, C)]//将第二步操作得到的C进行分区间计算

最通用的对 key-value 型 rdd 进行聚集操作的聚集函数(aggregation function)。类似于

aggregate(),combineByKey()允许用户返回值的类型与输入不一致。

4.sortByKey:根据键值进行排序,支持升序和降序。

函数说明

def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]

join:返回两个RDD中相同键对应的所有元素,结果为嵌套形式。
leftOuterJoin:左外连接,以元RDD为主。
rightOuterJoin:右外连接,以参数RDD为主。
行动算子的应用
collect

作用:将RDD中的所有元素收集到驱动端并返回数组。
注意事项:仅适用于小数据集,大数据集可能导致内存溢出。

RDD行动算子
reduce

作用:聚合RDD中的所有元素,返回一个具体值。
示例代码:展示了如何使用reduce进行累加操作。

 foreach

函数签名

def foreach(f: T => Unit): Unit = withScope {

 val cleanF = sc.clean(f)

 sc.runJob(this, (iter: Iterator[T]) => iter.foreach(cleanF))

}

函数说明

分布式遍历 RDD 中的每一个元素,调用指定函数

示例


count

作用:返回RDD中元素的个数,使用Long类型以防止溢出。

示例


first

作用:返回RDD中的第一个元素。
take

作用:返回RDD中的前N个元素组成的数组。

示例


takeOrdered

作用:返回RDD排序后的前N个元素组成的数组。
分区操作
分区计算
分区内计算:对每个分区内的数据进行计算。
分区间计算:对所有分区的数据进行汇总计算。
示例代码:展示了如何指定分区并进行分区内和分区间计算。


其他注意事项
RDD的执行

转换算子:不会立即执行,只有在行动算子触发时才会执行。
行动算子:触发实际计算并返回结果。

示例


数据类型

Long vs Int:使用Long类型来存储可能非常大的计数值,以防止溢出。

Spark的三大数据结构

RDD

RDD(Resilient Distributed Dataset) 是 Apache Spark 的核心抽象,代表一个不可变、分区的分布式数据集合,支持并行操作并具备容错性
累加器
可用于executor端变量信息聚合到java端程序定义的变量中。
每个task会得到变量副本并更新后传回driver端。

示例:

代码示例

广播变量
用于高效分发较大只读值。
是只读变量,多个spark操作可使用同一个。
创建累加器时要创建.class文件,作为类进行调用。


网站公告

今日签到

点亮在社区的每一天
去签到