You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by ao...@apache.org on 2023/12/24 18:56:06 UTC

(iceberg) branch main updated: Core: Use CharSequenceMap for writing unordered deletes (#9365)

This is an automated email from the ASF dual-hosted git repository.

aokolnychyi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new 6f4e33ec22 Core: Use CharSequenceMap for writing unordered deletes (#9365)
6f4e33ec22 is described below

commit 6f4e33ec222299efc19f1bb75e782f058f5d1131
Author: Anton Okolnychyi <ao...@apple.com>
AuthorDate: Sun Dec 24 19:56:00 2023 +0100

    Core: Use CharSequenceMap for writing unordered deletes (#9365)
---
 .../deletes/SortingPositionOnlyDeleteWriter.java   | 28 +++++++---------------
 1 file changed, 9 insertions(+), 19 deletions(-)

diff --git a/core/src/main/java/org/apache/iceberg/deletes/SortingPositionOnlyDeleteWriter.java b/core/src/main/java/org/apache/iceberg/deletes/SortingPositionOnlyDeleteWriter.java
index 728eff097e..8819640e9f 100644
--- a/core/src/main/java/org/apache/iceberg/deletes/SortingPositionOnlyDeleteWriter.java
+++ b/core/src/main/java/org/apache/iceberg/deletes/SortingPositionOnlyDeleteWriter.java
@@ -20,13 +20,11 @@ package org.apache.iceberg.deletes;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Map;
 import org.apache.iceberg.io.DeleteWriteResult;
 import org.apache.iceberg.io.FileWriter;
 import org.apache.iceberg.relocated.com.google.common.collect.Lists;
-import org.apache.iceberg.relocated.com.google.common.collect.Maps;
 import org.apache.iceberg.types.Comparators;
-import org.apache.iceberg.util.CharSequenceWrapper;
+import org.apache.iceberg.util.CharSequenceMap;
 import org.roaringbitmap.longlong.PeekableLongIterator;
 import org.roaringbitmap.longlong.Roaring64Bitmap;
 
@@ -44,28 +42,20 @@ public class SortingPositionOnlyDeleteWriter<T>
     implements FileWriter<PositionDelete<T>, DeleteWriteResult> {
 
   private final FileWriter<PositionDelete<T>, DeleteWriteResult> writer;
-  private final Map<CharSequenceWrapper, Roaring64Bitmap> positionsByPath;
-  private final CharSequenceWrapper pathWrapper;
+  private final CharSequenceMap<Roaring64Bitmap> positionsByPath;
   private DeleteWriteResult result = null;
 
   public SortingPositionOnlyDeleteWriter(FileWriter<PositionDelete<T>, DeleteWriteResult> writer) {
     this.writer = writer;
-    this.positionsByPath = Maps.newHashMap();
-    this.pathWrapper = CharSequenceWrapper.wrap(null);
+    this.positionsByPath = CharSequenceMap.create();
   }
 
   @Override
   public void write(PositionDelete<T> positionDelete) {
     CharSequence path = positionDelete.path();
     long position = positionDelete.pos();
-    Roaring64Bitmap positions = positionsByPath.get(pathWrapper.set(path));
-    if (positions != null) {
-      positions.add(position);
-    } else {
-      positions = new Roaring64Bitmap();
-      positions.add(position);
-      positionsByPath.put(CharSequenceWrapper.wrap(path), positions);
-    }
+    Roaring64Bitmap positions = positionsByPath.computeIfAbsent(path, Roaring64Bitmap::new);
+    positions.add(position);
   }
 
   @Override
@@ -88,12 +78,12 @@ public class SortingPositionOnlyDeleteWriter<T>
   private DeleteWriteResult writeDeletes() throws IOException {
     try {
       PositionDelete<T> positionDelete = PositionDelete.create();
-      for (CharSequenceWrapper path : sortedPaths()) {
+      for (CharSequence path : sortedPaths()) {
         // the iterator provides values in ascending sorted order
         PeekableLongIterator positions = positionsByPath.get(path).getLongIterator();
         while (positions.hasNext()) {
           long position = positions.next();
-          writer.write(positionDelete.set(path.get(), position, null /* no row */));
+          writer.write(positionDelete.set(path, position, null /* no row */));
         }
       }
     } finally {
@@ -103,8 +93,8 @@ public class SortingPositionOnlyDeleteWriter<T>
     return writer.result();
   }
 
-  private List<CharSequenceWrapper> sortedPaths() {
-    List<CharSequenceWrapper> paths = Lists.newArrayList(positionsByPath.keySet());
+  private List<CharSequence> sortedPaths() {
+    List<CharSequence> paths = Lists.newArrayList(positionsByPath.keySet());
     paths.sort(Comparators.charSequences());
     return paths;
   }