在spark应用程序开发的时候,如何进行重新分区?

提问者:帅平 问题分类:大数据
在spark中,我们知道读取hdfs文件的时候,当前读取的rdd只会有1个分区,即使设置了分区,例如:
val data = sc.textFile("hdfs://master:9000/source/a.txt",20)

像这里我们设置了20个分区,但是也不会起作用,所以这个时候会涉及到重新分区,需要怎么做?

 您阅读本篇文章共花了: 

1 个回答
北饮清茶
北饮清茶
涉及到从新区分的话,可以使用两个函数,分别是:coalesce 和 repartition 函数,这两个函数的区别是:
reparation是直接调用 coalesce(numPartitions, shuffle=True),不同的是,reparation 函数可以增加或减少分区数量,调用 repartition 函数时,还会产生 shuffle 操作(该操作与 HiveQL 的 DISTRIBUTE BY 操作类似。)。
而 coalesce 函数可以控制是否 shuffle,但当 shuffle 为 false 时,只能减小 partition 数,而无法增大。

使用案例如下:
val data = sc.textFile("hdfs://master:9000/source/a.txt",20)
val coData = data.coalesce(5,false)
val reData = data.repartition(5)
发布于:1年前 (2022-12-08) IP属地:四川省
我来回答