Spark
文章平均质量分 57
记录
清蒸小土豆
得不到就痛苦,得到了就无聊
展开
-
substract repartition sortedBy collect sum reduce Aggregreate take takeOrder min/max foreach算子底层实现
substract 用cogroup实现 效率低 substract 求差集 shuffle之后 在每个分区将重复的部分相减 这样比cogroup效率高 如果之前都被同样的分区器分区过了 就不用再shuffle了 substract调用substractbykey 再调用一个substractRDD repartition coalesce 可以改变分区的数量 ,底层调用coalesce coalesce 减少分区数量可以不shuffle,但是增加分区数量一定要shuffle 但是分区器变原创 2021-04-12 10:07:42 · 201 阅读 · 0 评论 -
groupBy groupByKey distinct
groupByKey 不在map端聚合 直接到reduce端聚合 可以 传分区器和分区数量 val list: Seq[(String, Int)] = List((“spark”, 6), (“spark”, 3), (“flink”, 7), (“hadoop”, 2), (“hadoop”, 8), (“spark”, 2), (“flume”, 9)) List((flink,CompactBuffer(7)), (spark,CompactBuffer(6, 3, 2)), (hadoop,Com原创 2021-04-08 19:31:23 · 114 阅读 · 0 评论 -
shuffleRDD底层实现
reducedByKey PairRDDFunctions 隐式增强类 中的方法 这个方法调用了一个默认的分区器并传入聚合函数 def reduceByKey(func: (V, V) => V): RDD[(K, V)] = self.withScope { reduceByKey(defaultPartitioner(self), func) } 之后调用PairRDDFunctions里的方法 combineByKeyWithClassTag def reduceByKey(partiti原创 2021-04-08 18:09:15 · 225 阅读 · 0 评论 -
Spark RDD 方法实现等底层原理
Spark读取数据分几个区 所有block块最多是128M大小 exam: 两个文件一个 100bit 一个124bit 会计算所有block块字节数总和 除以最小分区数(默认为2) 得到goalsize 224/2=112 如果有文件块大于 goalsize的1.1倍 124/112=1.107 > 1.1 则将这个大文件分为两个区 0~112 112~124 如果想要按文件数量分区 则设置最小分区数为1 则没有文件数可以超过goalsize 就不用拆分了原创 2021-04-06 23:32:16 · 154 阅读 · 0 评论