diff --git a/core/src/main/java/org/apache/iceberg/actions/BinPackRewritePositionDeletePlanner.java b/core/src/main/java/org/apache/iceberg/actions/BinPackRewritePositionDeletePlanner.java index 8e080ee30b76..458810f87c3f 100644 --- a/core/src/main/java/org/apache/iceberg/actions/BinPackRewritePositionDeletePlanner.java +++ b/core/src/main/java/org/apache/iceberg/actions/BinPackRewritePositionDeletePlanner.java @@ -27,6 +27,7 @@ import org.apache.iceberg.DeleteFile; import org.apache.iceberg.MetadataTableType; import org.apache.iceberg.MetadataTableUtils; +import org.apache.iceberg.PartitionData; import org.apache.iceberg.Partitioning; import org.apache.iceberg.PositionDeletesScanTask; import org.apache.iceberg.PositionDeletesTable; @@ -187,18 +188,20 @@ private StructLikeMap> groupByPartition( Types.StructType partitionType, Iterable tasks) { StructLikeMap> filesByPartition = StructLikeMap.create(partitionType); + PartitionData partitionKeyTemplate = new PartitionData(partitionType); for (PositionDeletesScanTask task : tasks) { StructLike coerced = PartitionUtil.coercePartition(partitionType, task.spec(), task.partition()); + StructLike partitionKey = partitionKeyTemplate.copyFor(coerced); - List partitionTasks = filesByPartition.get(coerced); + List partitionTasks = filesByPartition.get(partitionKey); if (partitionTasks == null) { partitionTasks = Lists.newArrayList(); } partitionTasks.add(task); - filesByPartition.put(coerced, partitionTasks); + filesByPartition.put(partitionKey, partitionTasks); } return filesByPartition;