Skip to content

perf(arrow-ipc): Avoid copies and write dictionary batches directly to writers when possible - #10128

Open
JakeDern wants to merge 4 commits into
apache:mainfrom
JakeDern:ipc-writer-collect-dicts
Open

perf(arrow-ipc): Avoid copies and write dictionary batches directly to writers when possible#10128
JakeDern wants to merge 4 commits into
apache:mainfrom
JakeDern:ipc-writer-collect-dicts

Conversation

@JakeDern

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

This is a follow on to #10044, applying basically the same optimization for dictionary batches.

This needs to wait for #10122 before merge.

What changes are included in this PR?

  • Add a gather step for collecting dictionary buffers and then write them direct to the final writer
  • Unify the write code path for dictionaries with the one for record batches as they're basically the same
  • Update a couple of function names to more accurately reflect their purpose

Are these changes tested?

Yes, existing unit tests should cover the change.

Are there any user-facing changes?

No.

@github-actions github-actions Bot added the arrow Changes to the arrow crate label Jun 11, 2026
@JakeDern

Copy link
Copy Markdown
Contributor Author

Pretty good improvement - ~42% for the dictionary case and ~20% for delta dictionary cases. Not 100% sure why less improvement on the delta side yet, but I think this is worth it to take on its own and can investigate further later.

Perf results from #10122:

➜  arrow-ipc git:(ipc-writer-dict-benches) cargo bench (StreamWriter|FileWriter)/write_10 --features zstd
zsh: no matches found: (StreamWriter|FileWriter)/write_10
➜  arrow-ipc git:(ipc-writer-dict-benches) cargo bench "(StreamWriter|FileWriter)/write_10" --features zstd
    Finished `bench` profile [optimized] target(s) in 0.07s
     Running benches/ipc_reader.rs (/home/jakedern/repos/arrow-rs/target/release/deps/ipc_reader-a1b491f58c77bb6a)
     Running benches/ipc_writer.rs (/home/jakedern/repos/arrow-rs/target/release/deps/ipc_writer-6612be2d7eba35b1)
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10: Collecting 100 samples in estimated 5.5019 s (50k iteratiarrow_ipc_stream_writer/StreamWriter/write_10
                        time:   [107.53 µs 108.06 µs 108.61 µs]
                        change: [−2.9828% −0.9112% +0.7341%] (p = 0.39 > 0.05)
                        No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
  3 (3.00%) high mild
  2 (2.00%) high severe
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10/zstd: Collecting 100 samples in estimated 5.0248 s (1100 iarrow_ipc_stream_writer/StreamWriter/write_10/zstd
                        time:   [4.5765 ms 4.6054 ms 4.6355 ms]
                        change: [−0.7831% +0.1488% +1.0639%] (p = 0.75 > 0.05)
                        No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
Benchmarking arrow_ipc_stream_writer/FileWriter/write_10: Collecting 100 samples in estimated 5.3861 s (50k iterationarrow_ipc_stream_writer/FileWriter/write_10
                        time:   [106.14 µs 106.82 µs 107.54 µs]
                        change: [+1.1887% +2.7126% +4.6164%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 12 outliers among 100 measurements (12.00%)
  6 (6.00%) high mild
  6 (6.00%) high severe
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10/dict: Collecting 100 samples in estimated 5.2009 s (71k itarrow_ipc_stream_writer/StreamWriter/write_10/dict
                        time:   [60.775 µs 62.004 µs 63.440 µs]
                        change: [−6.4822% −3.5063% −0.6010%] (p = 0.03 < 0.05)
                        Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10/dict/delta: Collecting 100 samples in estimated 5.0870 s (arrow_ipc_stream_writer/StreamWriter/write_10/dict/delta
                        time:   [128.47 µs 129.73 µs 130.88 µs]
                        change: [−1.8693% −0.0642% +1.7216%] (p = 0.95 > 0.05)
                        No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
Benchmarking arrow_ipc_stream_writer/FileWriter/write_10/dict/delta: Collecting 100 samples in estimated 5.5440 s (45arrow_ipc_stream_writer/FileWriter/write_10/dict/delta
                        time:   [130.29 µs 131.33 µs 132.26 µs]
                        change: [+1.8877% +2.8406% +3.8001%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild
  3 (3.00%) high mild
  2 (2.00%) high severe

➜  arrow-ipc git:(ipc-writer-dict-benches)

perf results from this branch:

➜  arrow-ipc git:(ipc-writer-collect-dicts) ✗ cargo bench "(StreamWriter|FileWriter)/write_10" --features zstd
   Compiling arrow-ipc v59.0.0 (/home/jakedern/repos/arrow-rs/arrow-ipc)
    Finished `bench` profile [optimized] target(s) in 2.55s
     Running benches/ipc_reader.rs (/home/jakedern/repos/arrow-rs/target/release/deps/ipc_reader-a1b491f58c77bb6a)
     Running benches/ipc_writer.rs (/home/jakedern/repos/arrow-rs/target/release/deps/ipc_writer-6612be2d7eba35b1)
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10: Collecting 100 samples in estimated 5.3935 s (50k iteratiarrow_ipc_stream_writer/StreamWriter/write_10
                        time:   [106.95 µs 107.85 µs 108.76 µs]
                        change: [−2.2269% −1.1032% −0.0394%] (p = 0.06 > 0.05)
                        No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10/zstd: Collecting 100 samples in estimated 5.0249 s (1100 iarrow_ipc_stream_writer/StreamWriter/write_10/zstd
                        time:   [4.5629 ms 4.5901 ms 4.6184 ms]
                        change: [−1.1939% −0.3327% +0.5704%] (p = 0.47 > 0.05)
                        No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild
Benchmarking arrow_ipc_stream_writer/FileWriter/write_10: Collecting 100 samples in estimated 5.0247 s (45k iterationarrow_ipc_stream_writer/FileWriter/write_10
                        time:   [109.86 µs 110.45 µs 111.11 µs]
                        change: [+0.3417% +2.0979% +3.7750%] (p = 0.01 < 0.05)
                        Change within noise threshold.
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) high mild
  3 (3.00%) high severe
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10/dict: Collecting 100 samples in estimated 5.0650 s (136k iarrow_ipc_stream_writer/StreamWriter/write_10/dict
                        time:   [37.300 µs 37.543 µs 37.807 µs]
                        change: [−43.963% −42.283% −40.548%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) high mild
  4 (4.00%) high severe
Benchmarking arrow_ipc_stream_writer/StreamWriter/write_10/dict/delta: Collecting 100 samples in estimated 5.4418 s (arrow_ipc_stream_writer/StreamWriter/write_10/dict/delta
                        time:   [103.36 µs 104.28 µs 105.18 µs]
                        change: [−19.764% −18.621% −17.508%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) low mild
  2 (2.00%) high mild
  3 (3.00%) high severe
Benchmarking arrow_ipc_stream_writer/FileWriter/write_10/dict/delta: Collecting 100 samples in estimated 5.4730 s (56arrow_ipc_stream_writer/FileWriter/write_10/dict/delta
                        time:   [104.84 µs 105.65 µs 106.44 µs]
                        change: [−20.651% −20.021% −19.377%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild

@JakeDern

Copy link
Copy Markdown
Contributor Author

CC: @alamb and @Rich-T-kid - I think we got pretty good results here! I also tried to clean up a few things here and there where I could like removing some unnecessary parameter drilling.

This has the benchmarks from #10122 as well, will rebase once that goes in.

@Rich-T-kid

Copy link
Copy Markdown
Contributor

I can take a look at this early next week.

@Rich-T-kid

Copy link
Copy Markdown
Contributor

started taking a look, results look good! 🚀
Image 6-16-26 at 10 19 PM

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this PR looks mostly fine. it would be nice to include a round trip test similar to ##10097 that validate that nothing is being broken.
left a couple non-blocking comments. Ill try and take a second pass through tommorow if I can get a chance/ if this is still open

Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs Outdated
@JakeDern
JakeDern force-pushed the ipc-writer-collect-dicts branch 2 times, most recently from 2a21b60 to f9a0328 Compare July 10, 2026 04:07
@JakeDern

Copy link
Copy Markdown
Contributor Author

Took a little longer than I'd have liked, but I got back to rebasing this and fixing it up. @Rich-T-kid or @alamb would definitely appreciate another look.

it would be nice to include a round trip test similar to ##10097 that validate that nothing is being broken.

We do have some round trip tests for the writer, but if there's anything specific missing here, I'm happy to take a stab at adding it!

@JakeDern
JakeDern marked this pull request as ready for review July 10, 2026 04:58
@Rich-T-kid

Copy link
Copy Markdown
Contributor

Ill try and take another look next week

@Rich-T-kid

Copy link
Copy Markdown
Contributor

cc @Phoenix500526 in case your interested

@JakeDern could you rebase this branch? I think there are outdated changed in your diff

@Rich-T-kid

Copy link
Copy Markdown
Contributor

This may also be related #9775

@alamb

alamb commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

run benchmark arrow_writer

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5025596378-1183-gj4ln 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing ipc-writer-collect-dicts (fd9d7c2) to fed7862 (merge-base) diff
BENCH_NAME=arrow_writer
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                              ipc-writer-collect-dicts               main
-----                                              ------------------------               ----
bool/bloom_filter                                  1.00     13.0±0.06ms    19.2 MB/sec    1.00     13.0±0.05ms    19.2 MB/sec
bool/cdc                                           1.00     15.6±0.07ms    16.0 MB/sec    1.00     15.6±0.05ms    16.0 MB/sec
bool/default                                       1.00     10.9±0.04ms    22.9 MB/sec    1.00     10.9±0.04ms    22.9 MB/sec
bool/parquet_2                                     1.00     14.7±0.05ms    17.0 MB/sec    1.00     14.7±0.05ms    17.0 MB/sec
bool/zstd                                          1.00     11.4±0.05ms    21.9 MB/sec    1.00     11.4±0.04ms    21.9 MB/sec
bool/zstd_parquet_2                                1.00     15.1±0.05ms    16.5 MB/sec    1.00     15.2±0.05ms    16.5 MB/sec
bool_non_null/bloom_filter                         1.00      7.0±0.03ms    18.0 MB/sec    1.00      7.0±0.03ms    17.9 MB/sec
bool_non_null/cdc                                  1.00      6.8±0.03ms    18.5 MB/sec    1.00      6.8±0.05ms    18.5 MB/sec
bool_non_null/default                              1.01      4.2±0.02ms    29.8 MB/sec    1.00      4.2±0.02ms    29.9 MB/sec
bool_non_null/parquet_2                            1.00      8.9±0.03ms    14.0 MB/sec    1.00      8.9±0.04ms    14.0 MB/sec
bool_non_null/zstd                                 1.00      4.5±0.03ms    27.6 MB/sec    1.00      4.5±0.02ms    27.6 MB/sec
bool_non_null/zstd_parquet_2                       1.00      9.3±0.05ms    13.4 MB/sec    1.00      9.4±0.04ms    13.3 MB/sec
bool_ree/bloom_filter                              1.00     30.6±0.05ms     7.0 MB/sec    1.00     30.5±0.04ms     7.0 MB/sec
bool_ree/cdc                                       1.00     31.7±0.07ms     6.7 MB/sec    1.00     31.8±0.05ms     6.7 MB/sec
bool_ree/default                                   1.00     27.9±0.05ms     7.6 MB/sec    1.00     27.8±0.05ms     7.7 MB/sec
bool_ree/parquet_2                                 1.00     29.5±0.05ms     7.2 MB/sec    1.00     29.4±0.07ms     7.2 MB/sec
bool_ree/zstd                                      1.00     28.5±0.05ms     7.5 MB/sec    1.00     28.4±0.05ms     7.5 MB/sec
bool_ree/zstd_parquet_2                            1.00     29.8±0.08ms     7.2 MB/sec    1.00     29.7±0.06ms     7.2 MB/sec
fixed_size_binary_ree/bloom_filter                 1.00     70.6±0.24ms    14.3 MB/sec    1.00     70.9±0.27ms    14.2 MB/sec
fixed_size_binary_ree/cdc                          1.00     73.3±0.14ms    13.7 MB/sec    1.01     73.7±0.14ms    13.7 MB/sec
fixed_size_binary_ree/default                      1.00     63.5±0.20ms    15.9 MB/sec    1.00     63.5±0.15ms    15.9 MB/sec
fixed_size_binary_ree/parquet_2                    1.00     80.2±0.48ms    12.6 MB/sec    1.01     80.7±0.47ms    12.5 MB/sec
fixed_size_binary_ree/zstd                         1.00     68.6±0.26ms    14.7 MB/sec    1.00     68.4±0.13ms    14.7 MB/sec
fixed_size_binary_ree/zstd_parquet_2               1.00     80.9±0.52ms    12.5 MB/sec    1.01     81.6±0.56ms    12.4 MB/sec
float_with_nans/bloom_filter                       1.09    103.4±0.48ms   135.4 MB/sec    1.00     94.8±0.43ms   147.7 MB/sec
float_with_nans/cdc                                1.00     81.7±0.19ms   171.3 MB/sec    1.01     82.2±0.24ms   170.2 MB/sec
float_with_nans/default                            1.13     84.4±0.20ms   165.8 MB/sec    1.00     74.8±0.24ms   187.2 MB/sec
float_with_nans/parquet_2                          1.09    105.4±0.46ms   132.8 MB/sec    1.00     96.4±0.35ms   145.2 MB/sec
float_with_nans/zstd                               1.09    122.6±0.48ms   114.2 MB/sec    1.00    112.8±0.22ms   124.2 MB/sec
float_with_nans/zstd_parquet_2                     1.07    142.6±0.33ms    98.2 MB/sec    1.00    133.7±0.32ms   104.7 MB/sec
int32_ree/bloom_filter                             1.00     41.7±0.14ms     9.7 MB/sec    1.00     41.6±0.17ms     9.8 MB/sec
int32_ree/cdc                                      1.01     41.2±0.11ms     9.9 MB/sec    1.00     40.9±0.08ms    10.0 MB/sec
int32_ree/default                                  1.00     37.1±0.12ms    11.0 MB/sec    1.00     37.0±0.10ms    11.0 MB/sec
int32_ree/parquet_2                                1.00     37.1±0.09ms    11.0 MB/sec    1.00     36.9±0.09ms    11.0 MB/sec
int32_ree/zstd                                     1.00     37.7±0.10ms    10.8 MB/sec    1.00     37.5±0.07ms    10.8 MB/sec
int32_ree/zstd_parquet_2                           1.00     37.7±0.09ms    10.8 MB/sec    1.00     37.5±0.08ms    10.9 MB/sec
int32_ree_95pct_null/bloom_filter                  1.00     22.1±0.05ms    18.4 MB/sec    1.00     22.1±0.04ms    18.4 MB/sec
int32_ree_95pct_null/cdc                           1.00     24.0±0.04ms    17.0 MB/sec    1.00     24.0±0.03ms    17.0 MB/sec
int32_ree_95pct_null/default                       1.00     21.6±0.02ms    18.8 MB/sec    1.00     21.6±0.03ms    18.8 MB/sec
int32_ree_95pct_null/parquet_2                     1.00     21.6±0.03ms    18.8 MB/sec    1.00     21.6±0.02ms    18.8 MB/sec
int32_ree_95pct_null/zstd                          1.00     21.9±0.03ms    18.6 MB/sec    1.00     21.9±0.04ms    18.5 MB/sec
int32_ree_95pct_null/zstd_parquet_2                1.00     21.8±0.03ms    18.6 MB/sec    1.00     21.8±0.03ms    18.6 MB/sec
large_string_non_null/bloom_filter                 1.02     73.8±0.16ms     3.4 GB/sec    1.00     72.1±0.17ms     3.5 GB/sec
large_string_non_null/cdc                          1.01    245.1±1.17ms  1044.6 MB/sec    1.00    243.5±1.07ms  1051.5 MB/sec
large_string_non_null/default                      1.02     55.2±0.15ms     4.5 GB/sec    1.00     54.3±0.18ms     4.6 GB/sec
large_string_non_null/parquet_2                    1.02     55.2±0.16ms     4.5 GB/sec    1.00     54.3±0.13ms     4.6 GB/sec
large_string_non_null/zstd                         1.02     55.3±0.16ms     4.5 GB/sec    1.00     54.4±0.17ms     4.6 GB/sec
large_string_non_null/zstd_parquet_2               1.02     55.3±0.15ms     4.5 GB/sec    1.00     54.3±0.16ms     4.6 GB/sec
list_nested/bloom_filter                           1.00    157.9±0.31ms   182.7 MB/sec    1.01    159.1±0.31ms   181.4 MB/sec
list_nested/cdc                                    1.00    175.0±0.30ms   164.9 MB/sec    1.00    175.6±0.29ms   164.3 MB/sec
list_nested/default                                1.00    143.9±0.25ms   200.5 MB/sec    1.00    144.5±0.48ms   199.8 MB/sec
list_nested/parquet_2                              1.00    157.1±0.24ms   183.7 MB/sec    1.00    157.5±0.27ms   183.2 MB/sec
list_nested/zstd                                   1.00    152.9±0.30ms   188.8 MB/sec    1.00    153.3±0.30ms   188.2 MB/sec
list_nested/zstd_parquet_2                         1.00    170.2±0.21ms   169.6 MB/sec    1.00    170.4±0.26ms   169.3 MB/sec
list_primitive/bloom_filter                        1.01    339.1±9.28ms  1608.2 MB/sec    1.00    336.1±2.98ms  1622.6 MB/sec
list_primitive/cdc                                 1.00   341.5±13.90ms  1597.0 MB/sec    1.01    344.5±9.61ms  1583.0 MB/sec
list_primitive/default                             1.01    255.0±8.86ms     2.1 GB/sec    1.00    251.5±3.02ms     2.1 GB/sec
list_primitive/parquet_2                           1.08    292.0±0.60ms  1867.9 MB/sec    1.00    271.2±0.39ms  2010.9 MB/sec
list_primitive/zstd                                1.04    511.1±8.10ms  1067.0 MB/sec    1.00    491.8±4.99ms  1109.0 MB/sec
list_primitive/zstd_parquet_2                      1.05    500.1±0.42ms  1090.5 MB/sec    1.00    477.0±0.34ms  1143.4 MB/sec
list_primitive_non_null/bloom_filter               1.00   443.9±21.91ms  1226.1 MB/sec    1.01   446.7±13.77ms  1218.3 MB/sec
list_primitive_non_null/cdc                        1.00    416.0±7.52ms  1308.4 MB/sec    1.01    421.9±9.95ms  1289.9 MB/sec
list_primitive_non_null/default                    1.00   296.2±22.52ms  1837.6 MB/sec    1.00   295.8±15.96ms  1839.6 MB/sec
list_primitive_non_null/parquet_2                  1.04    362.5±0.71ms  1501.2 MB/sec    1.00    348.2±0.97ms  1563.1 MB/sec
list_primitive_non_null/zstd                       1.01   719.1±23.82ms   756.8 MB/sec    1.00   711.6±22.43ms   764.8 MB/sec
list_primitive_non_null/zstd_parquet_2             1.06    730.2±5.42ms   745.3 MB/sec    1.00    685.8±0.82ms   793.6 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     12.6±0.08ms     2.9 GB/sec    1.00     12.7±0.11ms     2.9 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     24.3±0.07ms  1534.8 MB/sec    1.00     24.4±0.06ms  1528.4 MB/sec
list_primitive_sparse_99pct_null/default           1.00     12.2±0.07ms     3.0 GB/sec    1.01     12.3±0.06ms     3.0 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.00     12.2±0.06ms     3.0 GB/sec    1.01     12.3±0.07ms     3.0 GB/sec
list_primitive_sparse_99pct_null/zstd              1.00     14.1±0.06ms     2.6 GB/sec    1.01     14.2±0.06ms     2.6 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.00     12.4±0.07ms     2.9 GB/sec    1.00     12.4±0.06ms     2.9 GB/sec
list_struct_with_list/bloom_filter                 1.00    315.7±0.87ms   144.4 MB/sec    1.02    323.4±0.82ms   141.0 MB/sec
list_struct_with_list/cdc                          1.00    353.6±1.27ms   129.0 MB/sec    1.02    360.1±1.12ms   126.6 MB/sec
list_struct_with_list/default                      1.00    288.0±0.74ms   158.3 MB/sec    1.02    294.0±0.76ms   155.1 MB/sec
list_struct_with_list/parquet_2                    1.00    305.6±0.82ms   149.2 MB/sec    1.02    311.6±0.72ms   146.4 MB/sec
list_struct_with_list/zstd                         1.00    310.5±1.28ms   146.9 MB/sec    1.02    316.0±0.71ms   144.3 MB/sec
list_struct_with_list/zstd_parquet_2               1.00    329.3±0.80ms   138.5 MB/sec    1.02    335.4±0.81ms   135.9 MB/sec
primitive/bloom_filter                             1.01    151.2±0.43ms   296.9 MB/sec    1.00    150.0±0.46ms   299.2 MB/sec
primitive/cdc                                      1.00    160.1±0.56ms   280.3 MB/sec    1.00    159.8±0.62ms   280.8 MB/sec
primitive/default                                  1.00    119.4±0.37ms   375.9 MB/sec    1.00    119.1±0.37ms   376.8 MB/sec
primitive/parquet_2                                1.00    134.2±0.34ms   334.4 MB/sec    1.00    134.1±0.34ms   334.7 MB/sec
primitive/zstd                                     1.00    148.8±0.31ms   301.5 MB/sec    1.00    149.4±0.63ms   300.4 MB/sec
primitive/zstd_parquet_2                           1.00    167.5±0.38ms   267.8 MB/sec    1.00    167.2±0.32ms   268.4 MB/sec
primitive_all_null/bloom_filter                    1.00    940.1±6.87µs    46.6 GB/sec    1.01    950.6±4.97µs    46.1 GB/sec
primitive_all_null/cdc                             1.00     19.4±0.49ms     2.3 GB/sec    1.01     19.5±0.31ms     2.3 GB/sec
primitive_all_null/default                         1.00    313.2±1.57µs   139.9 GB/sec    1.00    312.1±1.10µs   140.4 GB/sec
primitive_all_null/parquet_2                       1.00    310.4±1.32µs   141.2 GB/sec    1.01    312.6±1.29µs   140.2 GB/sec
primitive_all_null/zstd                            1.01    433.9±1.22µs   101.0 GB/sec    1.00    430.9±1.35µs   101.7 GB/sec
primitive_all_null/zstd_parquet_2                  1.00    395.1±1.82µs   110.9 GB/sec    1.00    394.8±1.21µs   111.0 GB/sec
primitive_non_null/bloom_filter                    1.01    108.5±0.40ms   405.4 MB/sec    1.00    107.3±0.32ms   410.1 MB/sec
primitive_non_null/cdc                             1.00     91.0±0.28ms   483.3 MB/sec    1.00     90.9±0.28ms   484.1 MB/sec
primitive_non_null/default                         1.00     68.4±0.21ms   643.2 MB/sec    1.00     68.3±0.26ms   644.0 MB/sec
primitive_non_null/parquet_2                       1.00     90.2±0.23ms   488.1 MB/sec    1.00     89.9±0.19ms   489.4 MB/sec
primitive_non_null/zstd                            1.00     99.3±0.21ms   443.2 MB/sec    1.00     99.0±0.20ms   444.6 MB/sec
primitive_non_null/zstd_parquet_2                  1.00    123.8±0.20ms   355.5 MB/sec    1.00    123.7±0.20ms   355.8 MB/sec
primitive_sparse_99pct_null/bloom_filter           1.00     12.7±0.14ms     3.5 GB/sec    1.00     12.7±0.15ms     3.5 GB/sec
primitive_sparse_99pct_null/cdc                    1.00     30.2±0.39ms  1486.6 MB/sec    1.01     30.4±0.25ms  1476.5 MB/sec
primitive_sparse_99pct_null/default                1.00     10.9±0.09ms     4.0 GB/sec    1.01     11.0±0.07ms     4.0 GB/sec
primitive_sparse_99pct_null/parquet_2              1.00     10.9±0.07ms     4.0 GB/sec    1.01     11.0±0.06ms     4.0 GB/sec
primitive_sparse_99pct_null/zstd                   1.00     14.4±0.07ms     3.1 GB/sec    1.00     14.4±0.07ms     3.0 GB/sec
primitive_sparse_99pct_null/zstd_parquet_2         1.00     12.9±0.08ms     3.4 GB/sec    1.00     12.9±0.07ms     3.4 GB/sec
short_string_non_null/bloom_filter                 1.01     27.7±0.06ms   432.4 MB/sec    1.00     27.3±0.05ms   438.9 MB/sec
short_string_non_null/cdc                          1.00     20.1±0.06ms   597.7 MB/sec    1.00     20.1±0.06ms   598.5 MB/sec
short_string_non_null/default                      1.00     16.0±0.05ms   751.5 MB/sec    1.00     15.9±0.03ms   752.6 MB/sec
short_string_non_null/parquet_2                    1.00     26.9±0.09ms   446.2 MB/sec    1.00     26.8±0.05ms   448.1 MB/sec
short_string_non_null/zstd                         1.00     35.5±0.09ms   337.8 MB/sec    1.00     35.5±0.09ms   338.3 MB/sec
short_string_non_null/zstd_parquet_2               1.00     29.6±0.10ms   405.0 MB/sec    1.00     29.6±0.05ms   405.0 MB/sec
string/bloom_filter                                1.00   225.1±21.75ms     2.3 GB/sec    1.01   227.4±21.55ms     2.3 GB/sec
string/cdc                                         1.00    221.2±6.69ms     2.3 GB/sec    1.00    220.8±7.48ms     2.3 GB/sec
string/default                                     1.00   131.0±18.11ms     3.9 GB/sec    1.10   144.2±22.53ms     3.5 GB/sec
string/parquet_2                                   1.00    113.0±5.49ms     4.5 GB/sec    1.14    129.0±0.51ms     4.0 GB/sec
string/zstd                                        1.00   451.8±21.15ms  1160.2 MB/sec    1.01   457.2±19.28ms  1146.7 MB/sec
string/zstd_parquet_2                              1.00    401.3±5.68ms  1306.3 MB/sec    1.04   416.2±13.82ms  1259.6 MB/sec
string_and_binary_view/bloom_filter                1.01     65.7±0.31ms   491.2 MB/sec    1.00     64.9±0.32ms   496.6 MB/sec
string_and_binary_view/cdc                         1.00     59.7±0.18ms   540.5 MB/sec    1.00     59.4±0.21ms   542.7 MB/sec
string_and_binary_view/default                     1.00     49.0±0.22ms   657.7 MB/sec    1.00     48.8±0.16ms   660.5 MB/sec
string_and_binary_view/parquet_2                   1.01     60.8±0.19ms   530.5 MB/sec    1.00     60.4±0.18ms   534.0 MB/sec
string_and_binary_view/zstd                        1.00     85.6±0.15ms   376.7 MB/sec    1.00     85.7±0.32ms   376.3 MB/sec
string_and_binary_view/zstd_parquet_2              1.01     74.7±0.19ms   431.6 MB/sec    1.00     74.3±0.18ms   434.3 MB/sec
string_dictionary/bloom_filter                     1.01     92.6±1.21ms     2.8 GB/sec    1.00     91.6±1.30ms     2.8 GB/sec
string_dictionary/cdc                              1.00     53.3±1.43ms     4.8 GB/sec    1.80     96.1±2.68ms     2.7 GB/sec
string_dictionary/default                          1.00     48.2±1.02ms     5.3 GB/sec    1.00     48.1±1.11ms     5.4 GB/sec
string_dictionary/parquet_2                        1.00     54.2±0.17ms     4.8 GB/sec    1.01     54.8±0.22ms     4.7 GB/sec
string_dictionary/zstd                             1.00    209.3±1.45ms  1261.9 MB/sec    1.01    210.9±0.86ms  1252.6 MB/sec
string_dictionary/zstd_parquet_2                   1.00    199.8±0.22ms  1321.9 MB/sec    1.00    199.3±0.18ms  1325.5 MB/sec
string_non_null/bloom_filter                       1.03   252.1±14.58ms     2.0 GB/sec    1.00   244.2±15.47ms     2.1 GB/sec
string_non_null/cdc                                1.00    273.2±8.80ms  1918.2 MB/sec    1.01   275.8±10.01ms  1899.7 MB/sec
string_non_null/default                            1.00   130.9±15.65ms     3.9 GB/sec    1.06   138.4±17.42ms     3.7 GB/sec
string_non_null/parquet_2                          1.00    135.3±8.32ms     3.8 GB/sec    1.09    147.1±7.35ms     3.5 GB/sec
string_non_null/zstd                               1.03   568.4±14.41ms   921.9 MB/sec    1.00    550.4±2.77ms   952.1 MB/sec
string_non_null/zstd_parquet_2                     1.01    512.7±8.17ms  1022.1 MB/sec    1.00    509.3±4.85ms  1028.8 MB/sec
string_ree/bloom_filter                            1.00    112.1±2.02ms   146.4 MB/sec    1.51    169.8±3.98ms    96.6 MB/sec
string_ree/cdc                                     1.00    182.3±1.43ms    90.0 MB/sec    1.27    232.3±1.58ms    70.6 MB/sec
string_ree/default                                 1.00     84.6±1.91ms   194.0 MB/sec    1.62    137.1±3.07ms   119.7 MB/sec
string_ree/parquet_2                               1.00    132.9±0.39ms   123.4 MB/sec    1.38    182.9±0.55ms    89.7 MB/sec
string_ree/zstd                                    1.00    132.3±1.61ms   124.0 MB/sec    1.39    183.7±1.19ms    89.3 MB/sec
string_ree/zstd_parquet_2                          1.00    147.4±0.34ms   111.3 MB/sec    1.34    197.4±0.49ms    83.1 MB/sec
string_ree_95pct_null/bloom_filter                 1.00     26.6±0.06ms    52.8 MB/sec    1.00     26.7±0.07ms    52.6 MB/sec
string_ree_95pct_null/cdc                          1.00     32.6±0.08ms    43.2 MB/sec    1.00     32.7±0.10ms    43.0 MB/sec
string_ree_95pct_null/default                      1.00     25.0±0.05ms    56.3 MB/sec    1.00     25.1±0.06ms    56.1 MB/sec
string_ree_95pct_null/parquet_2                    1.00     25.0±0.05ms    56.3 MB/sec    1.00     25.1±0.06ms    56.1 MB/sec
string_ree_95pct_null/zstd                         1.00     25.8±0.05ms    54.5 MB/sec    1.00     25.9±0.05ms    54.3 MB/sec
string_ree_95pct_null/zstd_parquet_2               1.00     25.7±0.05ms    54.7 MB/sec    1.00     25.8±0.06ms    54.5 MB/sec
struct_all_null/bloom_filter                       1.00    390.1±1.32µs    40.4 GB/sec    1.02    398.4±1.38µs    39.5 GB/sec
struct_all_null/cdc                                1.00      7.9±0.13ms  2040.4 MB/sec    1.00      7.9±0.10ms  2037.5 MB/sec
struct_all_null/default                            1.00    133.8±0.56µs   117.7 GB/sec    1.00    134.1±0.52µs   117.4 GB/sec
struct_all_null/parquet_2                          1.00    133.6±0.65µs   117.9 GB/sec    1.00    133.7±0.57µs   117.8 GB/sec
struct_all_null/zstd                               1.00    184.7±0.65µs    85.2 GB/sec    1.01    185.7±0.56µs    84.8 GB/sec
struct_all_null/zstd_parquet_2                     1.00    168.7±0.72µs    93.4 GB/sec    1.00    169.3±0.59µs    93.0 GB/sec
struct_non_null/bloom_filter                       1.00     46.8±0.15ms   342.0 MB/sec    1.03     48.2±0.17ms   332.2 MB/sec
struct_non_null/cdc                                1.00     46.2±0.17ms   346.1 MB/sec    1.01     46.6±0.15ms   343.6 MB/sec
struct_non_null/default                            1.00     32.7±0.15ms   489.1 MB/sec    1.01     33.0±0.15ms   485.4 MB/sec
struct_non_null/parquet_2                          1.00     41.4±0.13ms   386.9 MB/sec    1.01     41.6±0.14ms   384.5 MB/sec
struct_non_null/zstd                               1.00     41.4±0.14ms   386.1 MB/sec    1.01     41.7±0.11ms   383.3 MB/sec
struct_non_null/zstd_parquet_2                     1.00     55.4±0.13ms   288.9 MB/sec    1.01     55.7±0.15ms   287.1 MB/sec
struct_sparse_99pct_null/bloom_filter              1.00      6.7±0.09ms     2.4 GB/sec    1.00      6.7±0.07ms     2.3 GB/sec
struct_sparse_99pct_null/cdc                       1.00     13.6±0.16ms  1181.7 MB/sec    1.01     13.7±0.11ms  1175.4 MB/sec
struct_sparse_99pct_null/default                   1.00      6.0±0.04ms     2.6 GB/sec    1.01      6.1±0.04ms     2.6 GB/sec
struct_sparse_99pct_null/parquet_2                 1.00      6.0±0.04ms     2.6 GB/sec    1.00      6.1±0.05ms     2.6 GB/sec
struct_sparse_99pct_null/zstd                      1.00      7.4±0.05ms     2.1 GB/sec    1.00      7.5±0.05ms     2.1 GB/sec
struct_sparse_99pct_null/zstd_parquet_2            1.00      6.9±0.06ms     2.3 GB/sec    1.00      6.8±0.05ms     2.3 GB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 2900.7s
Peak memory 2.7 GiB
Avg memory 2.5 GiB
CPU user 2762.3s
CPU sys 134.9s
Peak spill 0 B

branch

Metric Value
Wall time 2875.7s
Peak memory 2.7 GiB
Avg memory 2.5 GiB
CPU user 2769.0s
CPU sys 102.5s
Peak spill 0 B

File an issue against this benchmark runner

@JakeDern
JakeDern force-pushed the ipc-writer-collect-dicts branch from fd9d7c2 to 2bda004 Compare July 21, 2026 05:15
@JakeDern

Copy link
Copy Markdown
Contributor Author

cc @Phoenix500526 in case your interested

@JakeDern could you rebase this branch? I think there are outdated changed in your diff

I think we're all fixed up now - Nice to see so much IPC activity!

@Rich-T-kid

Copy link
Copy Markdown
Contributor

run benchmark arrow_writer

@alamb I think you meant to run run benchmarks ipc_writer

@alamb

alamb commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

run benchmark ipc_writer

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5063390096-1253-9phnk 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing ipc-writer-collect-dicts (2bda004) to 98998a8 (merge-base) diff
BENCH_NAME=ipc_writer
BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench ipc_writer
BENCH_FILTER=
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                                       ipc-writer-collect-dicts               main
-----                                                       ------------------------               ----
arrow_ipc_stream_writer/FileWriter/write_10                 1.00     88.0±0.37µs        ? ?/sec    1.04     91.5±0.34µs        ? ?/sec
arrow_ipc_stream_writer/FileWriter/write_10/dict/delta      1.00    135.9±1.00µs        ? ?/sec    1.08    147.2±2.75µs        ? ?/sec
arrow_ipc_stream_writer/StreamWriter/write_10               1.00     86.4±0.79µs        ? ?/sec    1.02     88.5±0.36µs        ? ?/sec
arrow_ipc_stream_writer/StreamWriter/write_10/dict          1.00     52.7±0.40µs        ? ?/sec    1.61     84.8±5.46µs        ? ?/sec
arrow_ipc_stream_writer/StreamWriter/write_10/dict/delta    1.00    134.3±0.76µs        ? ?/sec    1.08    145.7±3.58µs        ? ?/sec
arrow_ipc_stream_writer/StreamWriter/write_10/zstd          1.00      7.2±0.03ms        ? ?/sec    1.00      7.2±0.03ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 70.0s
Peak memory 11.9 MiB
Avg memory 9.8 MiB
CPU user 64.9s
CPU sys 0.0s
Peak spill 0 B

branch

Metric Value
Wall time 65.0s
Peak memory 12.4 MiB
Avg memory 10.1 MiB
CPU user 61.1s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@Rich-T-kid

Copy link
Copy Markdown
Contributor

arrow_ipc_stream_writer/StreamWriter/write_10/dict 1.00 52.7±0.40µs ? ?/sec 1.61 84.8±5.46µs ? ?/sec
🚀

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The benchmarks look very good and the PR looks nice. I left a couple of suggestions.

I'd like to take a second look as well! could you update the description to explain the flow between calls a bit more? The arrow-ipc reader/writer code takes a lot of context to keep in mind. 😮‍💨

Comment thread arrow-ipc/src/compression.rs Outdated
Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs

@Rich-T-kid Rich-T-kid left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @JakeDern this looks good to me. I left a couple comments, mostly nits.

🚀

Comment thread arrow-ipc/src/compression.rs Outdated
Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs
Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs Outdated
Comment thread arrow-ipc/src/writer.rs
Comment thread arrow-ipc/src/writer.rs Outdated
@Rich-T-kid

Copy link
Copy Markdown
Contributor

also with @Phoenix500526's #10277 being merged yesterday we may have to rebase this again

@JakeDern
JakeDern force-pushed the ipc-writer-collect-dicts branch from dcfe3f9 to e946870 Compare July 29, 2026 03:52
@JakeDern

Copy link
Copy Markdown
Contributor Author

Alright @Rich-T-kid, one more rebase for the books!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arrow Changes to the arrow crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

arrow-ipc: Reduce writer allocations for dictionary batches

5 participants