- byKey类的操作:比如 reduceByKey、groupByKey、sortByKey 等;因为要对一个key,进行聚合操作,那么肯定要保证集群中,所有节点上的,相同的 key,一定是到同一个节点上进行处理;
a. reduceByKey :将数据按照相同的 key 对 value进行聚合;
b. groupByKey :将数据按照相同的 key 对 value进行分组;
c. aggregateByKey :将数据按照不同的规则进行分区内计算和分区间计算;
d. foldByKey:当分区内计算规则和分区间计算规则相同时,aggregateByKey 就可以简化为 foldByKey;
e. combineByKey:当计算时,发现数据结构不满足要求时,可以让第一个数据转换结构。分区内和分区间计算规则不相同。
f. sortByKey :在一个(K,V)的 RDD 上调用,K 必须实现 Ordered 接口,返回一个按照 Key 进行排序的 RDD; - repartition类的操作:比如 repartition,coalesce等,重分区,一般会shuffle,因为需要在整个集群中,对之前所有分区的数据进行随机,均匀的打乱,然后把数据放入下游新的指定数据的分区内;
- join类的操作:比如 join 等,两个rdd进行 join,就必须将相同的 key 的数据,shuffle 到同一个节点上,然后进行相同 key 的两个 rdd 数据的笛卡尔乘积。
a. join :在类型为(K,V)和(K,W)的 RDD 上调用,返回一个相同 key 对应的所有元素连接在一起的 (K,(V,W))的 RDD;
请列举会引起 shuffle 过程的 spark 算子,并简述功能
于 2022-05-25 12:30:13 首次发布