private BloomFilter<StructLike> initializeBloomFilter() {
    if (!filterEqDelete) {
      return null;
    }

    LOG.debug(
        "Enable bloom-filter to filter eq-delete, (rewrite + rewrite pos) data count is {}",
        dataRecordCnt);
    // one million data is about 1.71M memory usage
    BloomFilter<StructLike> bloomFilter =
        BloomFilter.create(StructLikeFunnel.INSTANCE, dataRecordCnt, 0.001);

    Map<Set<Integer>, InternalRecordWrapper> recordWrappers = Maps.newHashMap();
    for (Map.Entry<Set<Integer>, Schema> deleteSchemaEntry : deleteSchemaByDeleteIds.entrySet()) {
      Set<Integer> ids = deleteSchemaEntry.getKey();
      Schema deleteSchema = deleteSchemaEntry.getValue();

      InternalRecordWrapper internalRecordWrapper =
          new InternalRecordWrapper(deleteSchema.asStruct());
      recordWrappers.put(ids, internalRecordWrapper);
    }

    try (CloseableIterable<Record> deletes = readRecords()) {
      for (Record record : deletes) {
        recordWrappers.forEach(
            (ids, internalRecordWrapper) -> {
              Schema deleteSchema = deleteSchemaByDeleteIds.get(ids);
              StructProjection projection =
                  StructProjection.create(requiredSchema, deleteSchema).wrap(record);
              StructLike deletePK = internalRecordWrapper.copyFor(projection);
              bloomFilter.put(deletePK);
            });
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }

    return bloomFilter;
  }
Get all delete ids of equality delete files

<p>For example, if there are two equality delete fields, one is [1, 2] and another is [1], the
delete ids will be [1, 2].

@return delete ids
amoro-format-iceberg/src/main/java/org/apache/amoro/io/reader/CombinedDeleteFilter.java