Flink物理分区及数据转换

谁践踏了优雅 2023-06-26 08:24 35阅读 0赞

(1) 随机分区(Random Partitioning)

随机分到下游分区,分区相对均衡,但比较容易失去原有数据的分区结构







val shuffleStream = dataStream.shuffle

(2) 平衡分区(Roundrobin Partitioning)

重分区,尽可能保证每个分区内的数量平衡







val shuffleStream = dataStream.rebalance()

(3) 按比例分区(Rescaling Partitioning)

上游并发度2,下游并发度4,上游一个分区的数据就会路由到下游的两个分区中







senv.readTextFile(“”).rescale()

(4) 广播操作

下游算子中的tasks可以直接从本地内存中获取广播数据集,不再依赖于网络传输.这种分区策略适合小数据集,当大数据与小数据集关联时,可以广播的方式将小数据集分发到算子的每个分区中







val datas = senv.readTextFile(“”).broadcast()

(5) 自定义分区







import org.apache.flink.api.common.functions.Partitioner

import scala.util.Random

object customPartitioner extends Partitioner[String] {

 override def partition(key: String, numPartitions: Int): Int = {

   if (key.contains(“flink”))

     0

   else

     Random.nextInt(numPartitions)

 }

}

format_png

发表评论

表情:
评论列表 (有 0 条评论,35人围观)

还没有评论,来说两句吧...

相关阅读

    相关 linux 系统格式化

    2.3 系统分区分区及格式化 磁盘分区:硬盘逻辑上分成几个不同的储存空间,用来保存不同的数据,就 像把大柜子分隔成几个小柜子,小柜子分别储存不同的东西,为什 么要分区?是为了