在Apache Flink中使用自定义分区程序时,我想将数据集的一些元素分配给多个分区。目前,我尝试复制这些元素并将每个元素分配到一个集群。我想知道有没有办法这样做?如果不是重复数据集子集的有效方法是什么?
答案 0 :(得分:4)
要生成重叠分区,首先必须复制元素。鉴于您知道要复制哪些元素,可以使用flatMap
操作完成。由于您希望将重复的元素分配给不同的分区,因此最好从flatMap
操作中分配分区ID。根据此ID,您可以应用分区步骤。
给定输入数据集input: DataSet[IN]
,您将生成一个重复数据集duplicated: DataSet[(Int, IN)]
,其中包含原始输入元素的元组及其对应的分区ID。之后,您可以在第一个元组字段上应用分区。
val duplicatedDS: DataSet[(Int, IN)] = input.flatMap(x => duplicateElement(x))
val partitioned = duplicatedDS.partitionByHash(0)