Transforms Pipeline (Examples 31-45)

This section covers data transformation operations.

Examples 31-33: Column Operations

use alimentar::{Select, Drop as DropTransform, Rename, Transform};

// Select columns
let select = Select::new(vec!["id".to_string(), "value".to_string()]);
let result = select.apply(batch)?;

// Drop columns
let drop = DropTransform::new(vec!["name".to_string()]);
let result = drop.apply(batch)?;

// Rename columns
let rename = Rename::new(vec![("old_name".into(), "new_name".into())]);
let result = rename.apply(batch)?;

Examples 34-35: Row Filtering

use alimentar::{Filter, Transform};

// Numeric filter
let filter = Filter::new("value > 100");
let result = filter.apply(batch)?;

// String filter
let filter = Filter::new("name LIKE 'item_%'");
let result = filter.apply(batch)?;

Examples 36-37: Null Fill Strategies

use alimentar::{FillNull, FillStrategy, Transform};

// Fill with mean
let fill = FillNull::new("score", FillStrategy::Mean);
let result = fill.apply(batch)?;

// Fill with constant
let fill = FillNull::new("score", FillStrategy::Constant(0.0));
let result = fill.apply(batch)?;

Examples 38-39: Normalization

use alimentar::{Normalize, NormStrategy, Transform};

// MinMax normalization [0, 1]
let norm = Normalize::new("value", NormStrategy::MinMax);
let result = norm.apply(batch)?;

// Z-score normalization (mean=0, std=1)
let norm = Normalize::new("value", NormStrategy::ZScore);
let result = norm.apply(batch)?;

Examples 40-41: Sorting

use alimentar::{Sort, Transform};

// Sort ascending
let sort = Sort::new("value", true);
let result = sort.apply(batch)?;

// Sort descending
let sort = Sort::new("value", false);
let result = sort.apply(batch)?;

Examples 42-44: Take, Skip, Unique

use alimentar::{Take, Skip, Unique, Transform};

// Take first N rows
let take = Take::new(100);
let result = take.apply(batch)?;

// Skip first N rows
let skip = Skip::new(10);
let result = skip.apply(batch)?;

// Remove duplicates
let unique = Unique::new(vec!["id".to_string()]);
let result = unique.apply(batch)?;

Example 45: Transform Chain

use alimentar::{TransformChain, Select, Filter, Normalize, Transform};

let chain = TransformChain::new()
    .add(Select::new(vec!["id".into(), "value".into()]))
    .add(Filter::new("value > 0"))
    .add(Normalize::new("value", NormStrategy::MinMax));

let result = chain.apply(batch)?;

Key Concepts

  • Immutable transforms: Each transform returns new batch
  • Composability: Chain transforms together
  • Type safety: Schema validation at each step
  • Zero-copy where possible: Arrow slice semantics