Skip to content
Opensource internals
  • Posts

Arrow

Polars Groups Columns So One Pass Feeds Many Aggregations

Oct 21, 2026 16 min read Jay Hubbert

Grouping in Polars is a separate stage: keys are encoded (single key, key rows, row encoding, or binview), hashed into group ids by a Grouper, and every aggregation expression then …

PolarsInternalsGroup byPerformanceArrow

Read more →

Polars Evaluates Expressions in an Arena

Oct 21, 2026 11 min read Jay Hubbert

Polars lowers the user-facing Expr tree into a flat Arena of nodes addressed by integer Node handles, which the physical planner walks to build Arc operators.

PolarsInternalsLazyPerformanceArrow

Read more →

Nulls Are Not Values: How DataFusion Skips Work Using Arrow's Validity Bitmaps

Oct 21, 2026 20 min read Jay Hubbert

Nulls live in a side-channel validity bitmap, not in the value buffer, which lets DataFusion branch once on ‘has any nulls’ and skip whole loops, filters, and comparisons.

DatafusionArrowPerformanceInternals

Read more →

Polars Shares Columns Instead of Copying Them: Arc, Bytes and Reference Counting

Oct 21, 2026 12 min read Jay Hubbert

Column bytes live in refcounted buffers; sharing a column clones handles, and the Arrow FFI imports foreign memory by keeping the C array alive as the buffer’s owner.

PolarsInternalsMemoryArrowConcurrency

Read more →

Polars Stores Short Strings Inline in 16 Bytes: The View Type

Oct 21, 2026 15 min read Jay Hubbert

The View type packs a 4-byte length, 4-byte prefix, buffer index and offset into 16 bytes, and inlines any string of 12 bytes or less directly into those bytes.

PolarsInternalsStringsArrowMemory

Read more →

← Newer Page 1 of 2 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·