archery

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 17, 2025 License: MIT Imports: 9 Imported by: 0

README

Archery: A Go Library for Apache Arrow Compute Operations

Archery provides an API for working with Apache Arrow compute operations in Go. It simplifies common tasks by providing direct functions that operate on Arrow arrays and records.

Features

  • Functional Design: Simple, idiomatic Go functions that work directly with Arrow arrays and records.
  • Full Type Support: Works with all standard Arrow data types.
  • Memory Management: Careful handling of Arrow memory to prevent leaks.
  • Comprehensive Operations:
    • Arithmetic functions (add, subtract, multiply, divide, etc.)
    • Filtering and comparison operations
    • Aggregation functions (sum, mean, min, max, etc.)
    • Sorting operations

Installation

go get github.com/TFMV/archery

Requires Go 1.19+ and Apache Arrow Go v18+.

Usage

Basic Array Operations
import (
    "context"
    "fmt"
    
    "github.com/TFMV/archery"
    "github.com/apache/arrow-go/v18/arrow/array"
    "github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
    // Create a new array
    builder := array.NewFloat64Builder(memory.DefaultAllocator)
    defer builder.Release()
    
    builder.AppendValues([]float64{1.0, 2.0, 3.0, 4.0, 5.0}, nil)
    arr := builder.NewFloat64Array()
    defer arr.Release()
    
    ctx := context.Background()
    
    // Add 10 to each element
    result, err := archery.AddScalar(ctx, arr, 10.0)
    if err != nil {
        panic(err)
    }
    defer archery.ReleaseArray(result)
    
    // Display the result
    for i := 0; i < result.Len(); i++ {
        fmt.Println(result.(*array.Float64).Value(i))  // 11.0, 12.0, 13.0, 14.0, 15.0
    }
}
Working with Records
import (
    "context"
    "fmt"
    
    "github.com/TFMV/archery"
    "github.com/apache/arrow-go/v18/arrow"
    "github.com/apache/arrow-go/v18/arrow/array"
    "github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
    // Create sample data
    builder := array.NewFloat64Builder(memory.DefaultAllocator)
    defer builder.Release()
    
    builder.AppendValues([]float64{1.0, 2.0, 3.0, 4.0, 5.0}, nil)
    values := builder.NewFloat64Array()
    defer values.Release()
    
    // Create another column
    builder.Reset()
    builder.AppendValues([]float64{10.0, 20.0, 30.0, 40.0, 50.0}, nil)
    moreValues := builder.NewFloat64Array()
    defer moreValues.Release()
    
    // Create a schema
    fields := []arrow.Field{
        {Name: "values", Type: arrow.PrimitiveTypes.Float64},
        {Name: "more_values", Type: arrow.PrimitiveTypes.Float64},
    }
    schema := arrow.NewSchema(fields, nil)
    
    // Create the record
    columns := []arrow.Array{values, moreValues}
    record := array.NewRecord(schema, columns, int64(values.Len()))
    defer archery.ReleaseRecord(record)
    
    ctx := context.Background()
    
    // Calculate sum of a column
    sum, err := archery.SumColumn(ctx, record, "values")
    if err != nil {
        panic(err)
    }
    fmt.Printf("Sum of values: %v\n", sum)  // 15.0
    
    // Get a column by name
    col, err := archery.GetColumn(record, "values")
    if err != nil {
        panic(err)
    }
    defer col.Release()
    
    // Filter rows where values > 2
    mask, err := archery.GreaterScalar(ctx, col, 2.0)
    if err != nil {
        panic(err)
    }
    defer archery.ReleaseArray(mask)
    
    filtered, err := archery.FilterRecord(ctx, record, mask)
    if err != nil {
        panic(err)
    }
    defer archery.ReleaseRecord(filtered)
    
    fmt.Printf("Filtered record has %d rows\n", filtered.NumRows())  // 3
}
Filtering and Null Handling
import (
    "context"
    "fmt"
    
    "github.com/TFMV/archery"
    "github.com/apache/arrow-go/v18/arrow/array"
    "github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
    // Create a test array with nulls
    builder := array.NewInt64Builder(memory.DefaultAllocator)
    defer builder.Release()
    
    // Add values with some nulls
    builder.AppendValues([]int64{1, 2, 3}, []bool{true, false, true})
    builder.AppendNull()
    builder.AppendValues([]int64{5, 6}, []bool{true, true})
    
    arr := builder.NewInt64Array()
    defer arr.Release()
    
    // Create a mask for non-null values
    maskBuilder := array.NewBooleanBuilder(memory.DefaultAllocator)
    defer maskBuilder.Release()
    
    for i := 0; i < arr.Len(); i++ {
        maskBuilder.Append(!arr.IsNull(i))
    }
    
    mask := maskBuilder.NewBooleanArray()
    defer mask.Release()
    
    // Apply the mask to drop nulls
    ctx := context.Background()
    nonNullArr, err := archery.Filter(ctx, arr, mask)
    if err != nil {
        panic(err)
    }
    defer archery.ReleaseArray(nonNullArr)
    
    // Print the non-null values
    fmt.Println("Non-null values:")
    for i := 0; i < nonNullArr.Len(); i++ {
        fmt.Printf("%d ", nonNullArr.(*array.Int64).Value(i))
    }
    // Output: 1 3 5 6
    
    // Count nulls
    nullCount := archery.CountNull(ctx, arr)
    fmt.Printf("Null count: %d\n", nullCount)
    // Output: 2
}

Available Functions

Arithmetic Operations
  • Add(ctx, a, b arrow.Array) (arrow.Array, error)
  • Subtract(ctx, a, b arrow.Array) (arrow.Array, error)
  • Multiply(ctx, a, b arrow.Array) (arrow.Array, error)
  • Divide(ctx, a, b arrow.Array) (arrow.Array, error)
  • Power(ctx, a, b arrow.Array) (arrow.Array, error)
  • AddScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • SubtractScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • MultiplyScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • DivideScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • PowerScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • Abs(ctx, arr arrow.Array) (arrow.Array, error)
  • Negate(ctx, arr arrow.Array) (arrow.Array, error)
  • Sqrt(ctx, arr arrow.Array) (arrow.Array, error)
  • Sign(ctx, arr arrow.Array) (arrow.Array, error)
Aggregation Operations
  • Sum(ctx, arr arrow.Array) (interface{}, error)
  • Mean(ctx, arr arrow.Array) (float64, error)
  • Min(ctx, arr arrow.Array) (interface{}, error)
  • Max(ctx, arr arrow.Array) (interface{}, error)
  • Variance(ctx, arr arrow.Array) (float64, error)
  • StandardDeviation(ctx, arr arrow.Array) (float64, error)
  • Count(ctx, arr arrow.Array) (int64, error)
  • CountNull(ctx, arr arrow.Array) int64
  • Mode(ctx, arr arrow.Array) (interface{}, error)
  • Any(ctx, arr arrow.Array) (bool, error) - For boolean arrays
  • All(ctx, arr arrow.Array) (bool, error) - For boolean arrays
Filtering and Comparison Operations
  • Filter(ctx, input arrow.Array, mask arrow.Array) (arrow.Array, error)
  • IsNull(ctx, arr arrow.Array) (arrow.Array, error) - Returns boolean mask
  • IsValid(ctx, arr arrow.Array) (arrow.Array, error) - Returns boolean mask
  • Equal(ctx, a, b arrow.Array) (arrow.Array, error) - Returns boolean mask
  • NotEqual(ctx, a, b arrow.Array) (arrow.Array, error) - Returns boolean mask
  • Greater(ctx, a, b arrow.Array) (arrow.Array, error) - Returns boolean mask
  • GreaterEqual(ctx, a, b arrow.Array) (arrow.Array, error) - Returns boolean mask
  • Less(ctx, a, b arrow.Array) (arrow.Array, error) - Returns boolean mask
  • LessEqual(ctx, a, b arrow.Array) (arrow.Array, error) - Returns boolean mask
  • And(ctx, a, b arrow.Array) (arrow.Array, error) - Boolean AND
  • Or(ctx, a, b arrow.Array) (arrow.Array, error) - Boolean OR
  • Xor(ctx, a, b arrow.Array) (arrow.Array, error) - Boolean XOR
  • EqualScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • NotEqualScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • GreaterScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • GreaterEqualScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • LessScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
  • LessEqualScalar(ctx, arr arrow.Array, value interface{}) (arrow.Array, error)
Sorting Operations
  • Sort(ctx, arr arrow.Array, order SortOrder) (arrow.Array, error)
  • SortIndices(ctx, arr arrow.Array, order SortOrder) (arrow.Array, error)
  • TakeWithIndices(ctx, arr, indices arrow.Array) (arrow.Array, error)
  • NthElement(ctx, arr arrow.Array, n int64, order SortOrder) (interface{}, error)
  • Rank(ctx, arr arrow.Array, order SortOrder) (arrow.Array, error)
  • UniqueValues(ctx, arr arrow.Array) (arrow.Array, error)
  • CountValues(ctx, arr arrow.Array) (values arrow.Array, counts arrow.Array, err error)
Record Operations
  • FilterRecord(ctx, rec arrow.Record, mask arrow.Array) (arrow.Record, error)
  • FilterRecordByColumn(ctx, rec arrow.Record, colName string, condition arrow.Array) (arrow.Record, error)
  • FilterRecordByColumnValue(ctx, rec arrow.Record, colName string, value interface{}) (arrow.Record, error)
  • FilterRecordByColumnRange(ctx, rec arrow.Record, colName string, min, max interface{}) (arrow.Record, error)
  • SortRecord(ctx, rec arrow.Record, sortCols []string, sortOrders []SortOrder) (arrow.Record, error)
  • SortRecordByColumn(ctx, rec arrow.Record, colName string, order SortOrder) (arrow.Record, error)
  • SumColumn(ctx, rec arrow.Record, colName string) (interface{}, error)
  • MeanColumn(ctx, rec arrow.Record, colName string) (float64, error)
  • MinColumn(ctx, rec arrow.Record, colName string) (interface{}, error)
  • MaxColumn(ctx, rec arrow.Record, colName string) (interface{}, error)
  • VarianceColumn(ctx, rec arrow.Record, colName string) (float64, error)
  • StandardDeviationColumn(ctx, rec arrow.Record, colName string) (float64, error)
  • CountColumn(ctx, rec arrow.Record, colName string) (int64, error)
Utility Functions
  • ReleaseArray(arr arrow.Array)
  • ReleaseRecord(rec arrow.Record)
  • GetColumn(rec arrow.Record, name string) (arrow.Array, error)
  • GetColumnIndex(rec arrow.Record, name string) (int, error)
  • ColumnNames(rec arrow.Record) []string
  • ReplaceRecordColumn(rec arrow.Record, colIndex int, newCol arrow.Array) arrow.Record
  • ReplaceRecordColumnByName(rec arrow.Record, colName string, newCol arrow.Array) (arrow.Record, error)

Implementation Details

Archery implements many functions that are not available in the core Arrow Go library. These include:

  1. Aggregation Functions: Functions like Sum, Mean, Min, Max, Variance, StandardDeviation, etc. are implemented manually to provide functionality that's missing from the Arrow compute module.

  2. Sorting Functions: Functions like Sort, SortIndices, UniqueValues, etc. are implemented manually since the Arrow Go library doesn't provide these compute functions.

  3. Memory Management: Archery provides careful memory management with functions like ReleaseArray and ReleaseRecord to prevent memory leaks when working with Arrow data structures.

Examples

The library includes comprehensive testable examples for all major functionality. You can view these examples in the Go documentation or in the example_test.go file.

Missing Functionality

For details on functionality that is currently missing from the Arrow Go library and implemented manually in Archery, see the MISSING_FUNCTIONALITY.md file.

License

MIT

Documentation

Overview

Package archery provides a simple and idiomatic Go API for Apache Arrow compute operations.

Example (Abs)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array with negative values
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{-1, 2, -3, 4, -5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate absolute values
	ctx := context.Background()
	result, err := archery.Abs(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(result)

	// Print the result
	fmt.Println("Absolute values:")
	for i := 0; i < result.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", result.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Absolute values:
1.0 2.0 3.0 4.0 5.0
Example (Add)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create two test arrays
	builder1 := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder1.Release()

	builder1.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr1 := builder1.NewFloat64Array()
	defer arr1.Release()

	builder2 := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder2.Release()
	builder2.AppendValues([]float64{10, 20, 30, 40, 50}, nil)
	arr2 := builder2.NewFloat64Array()
	defer arr2.Release()

	// Add arrays
	ctx := context.Background()
	result, err := archery.Add(ctx, arr1, arr2)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(result)

	// Print the result
	fmt.Println("Add arrays:")
	for i := 0; i < result.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", result.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Add arrays:
11.0 22.0 33.0 44.0 55.0
Example (AddScalar)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Add a scalar
	ctx := context.Background()
	result, err := archery.AddScalar(ctx, arr, float64(10))
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(result)

	// Print the result
	fmt.Println("Add 10:")
	for i := 0; i < result.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", result.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Add 10:
11.0 12.0 13.0 14.0 15.0
Example (Count)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array with some null values
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, []bool{true, true, false, true, true})
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Count non-null values
	ctx := context.Background()
	count, err := archery.Count(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Count null values
	nullCount := archery.CountNull(ctx, arr)

	// Print the results
	fmt.Printf("Count: %d\n", count)
	fmt.Printf("Null Count: %d\n", nullCount)

}
Output:

Count: 4
Null Count: 1
Example (CountValues)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array with duplicates
	builder := array.NewInt64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]int64{1, 2, 2, 3, 1, 4, 5, 5}, nil)
	arr := builder.NewInt64Array()
	defer arr.Release()

	// Count values
	ctx := context.Background()
	values, counts, err := archery.CountValues(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(values)
	defer archery.ReleaseArray(counts)

	// Print the values and counts
	fmt.Println("Value counts:")
	for i := 0; i < values.Len(); i++ {
		fmt.Printf("%d: %d\n", values.(*array.Int64).Value(i), counts.(*array.Int64).Value(i))
	}

}
Output:

Value counts:
1: 2
2: 2
3: 1
4: 1
5: 2
Example (Filter)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewInt64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, nil)
	arr := builder.NewInt64Array()
	defer arr.Release()

	// Create a mask for values > 5
	ctx := context.Background()
	mask, err := archery.GreaterScalar(ctx, arr, int64(5))
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(mask)

	// Apply the mask
	filtered, err := archery.Filter(ctx, arr, mask)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(filtered)

	// Print the filtered array
	fmt.Println("Values > 5:")
	for i := 0; i < filtered.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%d", filtered.(*array.Int64).Value(i))
	}
	fmt.Println()

}
Output:

Values > 5:
6 7 8 9 10
Example (FilterRange)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewInt64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, nil)
	arr := builder.NewInt64Array()
	defer arr.Release()

	// Create masks for 3 <= x <= 7
	ctx := context.Background()
	lowerMask, err := archery.GreaterEqualScalar(ctx, arr, int64(3))
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(lowerMask)

	upperMask, err := archery.LessEqualScalar(ctx, arr, int64(7))
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(upperMask)

	// Combine masks
	combinedMask, err := archery.And(ctx, lowerMask, upperMask)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(combinedMask)

	// Apply the combined mask
	filtered, err := archery.Filter(ctx, arr, combinedMask)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(filtered)

	// Print the filtered array
	fmt.Println("Values between 3 and 7:")
	for i := 0; i < filtered.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%d", filtered.(*array.Int64).Value(i))
	}
	fmt.Println()

}
Output:

Values between 3 and 7:
3 4 5 6 7
Example (IsIn)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewInt64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]int64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, nil)
	arr := builder.NewInt64Array()
	defer arr.Release()

	// Create a set of values to check against
	setValues := []int64{2, 4, 6, 8, 10}

	// Create a mask for values in the set
	ctx := context.Background()

	// Create individual masks for each value in the set
	masks := make([]arrow.Array, len(setValues))
	for i, val := range setValues {
		mask, err := archery.EqualScalar(ctx, arr, val)
		if err != nil {
			fmt.Println("Error:", err)
			return
		}
		masks[i] = mask
	}

	// Combine all masks with OR
	var combinedMask arrow.Array
	if len(masks) > 0 {
		combinedMask = masks[0]
		for i := 1; i < len(masks); i++ {
			newMask, err := archery.Or(ctx, combinedMask, masks[i])
			if err != nil {
				fmt.Println("Error:", err)
				return
			}
			combinedMask.Release()
			masks[i].Release()
			combinedMask = newMask
		}
	}
	defer archery.ReleaseArray(combinedMask)

	// Apply the mask
	filtered, err := archery.Filter(ctx, arr, combinedMask)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(filtered)

	// Print the filtered array
	fmt.Println("Values in set [2, 4, 6, 8, 10]:")
	for i := 0; i < filtered.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%d", filtered.(*array.Int64).Value(i))
	}
	fmt.Println()

}
Output:

Values in set [2, 4, 6, 8, 10]:
2 4 6 8 10
Example (Mean)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate mean
	ctx := context.Background()
	mean, err := archery.Mean(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Print the result
	fmt.Printf("Mean: %.1f\n", mean)

}
Output:

Mean: 3.0
Example (MinMax)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate min and max
	ctx := context.Background()
	min, err := archery.Min(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	max, err := archery.Max(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Print the results
	fmt.Printf("Min: %.1f\n", min)
	fmt.Printf("Max: %.1f\n", max)

}
Output:

Min: 1.0
Max: 5.0
Example (MultiplyScalar)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Multiply by a scalar
	ctx := context.Background()
	result, err := archery.MultiplyScalar(ctx, arr, float64(2))
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(result)

	// Print the result
	fmt.Println("Multiply by 2:")
	for i := 0; i < result.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", result.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Multiply by 2:
2.0 4.0 6.0 8.0 10.0
Example (NthElement)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{5, 3, 1, 4, 2}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Get the 2nd element (0-indexed) in sorted order
	ctx := context.Background()
	element, err := archery.NthElement(ctx, arr, 2, archery.Ascending)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Print the result
	fmt.Printf("3rd smallest element: %.1f\n", element)

}
Output:

3rd smallest element: 3.0
Example (NullFiltering)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array with nulls
	builder := array.NewInt64Builder(memory.DefaultAllocator)
	defer builder.Release()

	// Add values with some nulls
	builder.AppendValues([]int64{1, 2, 3}, []bool{true, false, true})
	builder.AppendNull()
	builder.AppendValues([]int64{5, 6}, []bool{true, true})

	arr := builder.NewInt64Array()
	defer arr.Release()

	// Create a manual mask for non-null values
	maskBuilder := array.NewBooleanBuilder(memory.DefaultAllocator)
	defer maskBuilder.Release()

	for i := 0; i < arr.Len(); i++ {
		maskBuilder.Append(!arr.IsNull(i))
	}

	mask := maskBuilder.NewBooleanArray()
	defer mask.Release()

	// Apply the mask to drop nulls
	ctx := context.Background()
	nonNullArr, err := archery.Filter(ctx, arr, mask)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(nonNullArr)

	// Print the non-null values
	fmt.Println("Non-null values:")
	for i := 0; i < nonNullArr.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%d", nonNullArr.(*array.Int64).Value(i))
	}
	fmt.Println()

	// Count nulls
	nullCount := archery.CountNull(ctx, arr)
	fmt.Printf("Null count: %d\n", nullCount)

}
Output:

Non-null values:
1 3 5 6
Null count: 2
Example (Sort)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{5, 3, 1, 4, 2}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Sort the array in ascending order
	ctx := context.Background()
	sorted, err := archery.Sort(ctx, arr, archery.Ascending)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(sorted)

	// Print the sorted array
	fmt.Println("Sorted (ascending):")
	for i := 0; i < sorted.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", sorted.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Sorted (ascending):
1.0 2.0 3.0 4.0 5.0
Example (SortDescending)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{5, 3, 1, 4, 2}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Sort the array in descending order
	ctx := context.Background()
	sorted, err := archery.Sort(ctx, arr, archery.Descending)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(sorted)

	// Print the sorted array
	fmt.Println("Sorted (descending):")
	for i := 0; i < sorted.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", sorted.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Sorted (descending):
5.0 4.0 3.0 2.0 1.0
Example (SortIndices)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{5, 3, 1, 4, 2}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Get sort indices
	ctx := context.Background()
	indices, err := archery.SortIndices(ctx, arr, archery.Ascending)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(indices)

	// Print the indices
	fmt.Println("Sort indices:")
	for i := 0; i < indices.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%d", indices.(*array.Int64).Value(i))
	}
	fmt.Println()

}
Output:

Sort indices:
2 4 1 3 0
Example (Sqrt)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 4, 9, 16, 25}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate square root
	ctx := context.Background()
	result, err := archery.Sqrt(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(result)

	// Print the result
	fmt.Println("Square root:")
	for i := 0; i < result.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%.1f", result.(*array.Float64).Value(i))
	}
	fmt.Println()

}
Output:

Square root:
1.0 2.0 3.0 4.0 5.0
Example (StandardDeviation)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate standard deviation
	ctx := context.Background()
	stdDev, err := archery.StandardDeviation(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Print the result (rounded to 1 decimal place)
	fmt.Printf("Standard Deviation: %.1f\n", stdDev)

}
Output:

Standard Deviation: 1.4
Example (Sum)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate sum
	ctx := context.Background()
	sum, err := archery.Sum(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Print the result
	fmt.Printf("Sum: %.1f\n", sum)

}
Output:

Sum: 15.0
Example (UniqueValues)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array with duplicates
	builder := array.NewInt64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]int64{1, 2, 2, 3, 1, 4, 5, 5}, nil)
	arr := builder.NewInt64Array()
	defer arr.Release()

	// Get unique values
	ctx := context.Background()
	unique, err := archery.UniqueValues(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer archery.ReleaseArray(unique)

	// Print the unique values
	fmt.Println("Unique values:")
	for i := 0; i < unique.Len(); i++ {
		if i > 0 {
			fmt.Printf(" ")
		}
		fmt.Printf("%d", unique.(*array.Int64).Value(i))
	}
	fmt.Println()

}
Output:

Unique values:
1 2 3 4 5
Example (Variance)
package main

import (
	"context"
	"fmt"

	"github.com/TFMV/archery"
	"github.com/apache/arrow-go/v18/arrow/array"
	"github.com/apache/arrow-go/v18/arrow/memory"
)

func main() {
	// Create a test array
	builder := array.NewFloat64Builder(memory.DefaultAllocator)
	defer builder.Release()
	builder.AppendValues([]float64{1, 2, 3, 4, 5}, nil)
	arr := builder.NewFloat64Array()
	defer arr.Release()

	// Calculate variance
	ctx := context.Background()
	variance, err := archery.Variance(ctx, arr)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	// Print the result
	fmt.Printf("Variance: %.1f\n", variance)

}
Output:

Variance: 2.0

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Abs added in v0.4.0

func Abs(ctx context.Context, a arrow.Array) (arrow.Array, error)

Abs calculates the absolute value of each element in an array

func Add

func Add(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Add performs element-wise addition of two arrays

func AddColumnScalar added in v0.4.0

func AddColumnScalar(ctx context.Context, rec arrow.Record, colName string, val interface{}) (arrow.Record, error)

AddColumnScalar adds a scalar to a column in a record batch

func AddColumns added in v0.4.0

func AddColumns(ctx context.Context, a, b arrow.Record, colName string) (arrow.Record, error)

AddColumns adds corresponding columns from two record batches

func AddScalar

func AddScalar(ctx context.Context, a arrow.Array, val interface{}) (arrow.Array, error)

AddScalar adds a scalar value to each element of an array

func All added in v0.4.0

func All(ctx context.Context, input arrow.Array) (bool, error)

All returns true if all elements in the boolean array are true

func And added in v0.4.0

func And(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

And performs logical AND operation on two boolean arrays

func Any added in v0.4.0

func Any(ctx context.Context, input arrow.Array) (bool, error)

Any returns true if any element in the boolean array is true

func ColumnNames added in v0.4.0

func ColumnNames(rec arrow.Record) []string

ColumnNames returns the names of all columns in the record

func Count

func Count(ctx context.Context, input arrow.Array) (int64, error)

Count returns the number of non-null elements in the array

func CountColumn added in v0.4.0

func CountColumn(ctx context.Context, rec arrow.Record, colName string) (int64, error)

CountColumn returns the number of non-null elements in a column

func CountNull added in v0.4.0

func CountNull(ctx context.Context, input arrow.Array) int64

CountNull returns the number of null elements in the array

func CountValues added in v0.4.0

func CountValues(ctx context.Context, input arrow.Array) (values arrow.Array, counts arrow.Array, err error)

CountValues returns the unique values and their counts in the array

func Divide

func Divide(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Divide performs element-wise division of two arrays

func DivideColumnScalar added in v0.4.0

func DivideColumnScalar(ctx context.Context, rec arrow.Record, colName string, val interface{}) (arrow.Record, error)

DivideColumnScalar divides a column in a record batch by a scalar

func DivideColumns added in v0.4.0

func DivideColumns(ctx context.Context, a, b arrow.Record, colName string) (arrow.Record, error)

DivideColumns divides corresponding columns from two record batches

func DivideScalar

func DivideScalar(ctx context.Context, a arrow.Array, val interface{}) (arrow.Array, error)

DivideScalar divides each element of an array by a scalar value

func Equal added in v0.2.0

func Equal(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Equal returns a mask array indicating which elements are equal

func EqualScalar added in v0.4.0

func EqualScalar(ctx context.Context, input arrow.Array, val interface{}) (arrow.Array, error)

EqualScalar returns a mask array indicating which elements are equal to the scalar value

func Filter added in v0.4.0

func Filter(ctx context.Context, input arrow.Array, mask arrow.Array) (arrow.Array, error)

Filter returns a new array with only elements where the mask is true

func FilterRecord added in v0.4.0

func FilterRecord(ctx context.Context, input arrow.Record, mask arrow.Array) (arrow.Record, error)

FilterRecord returns a new record with only rows where the mask is true

func FilterRecordByColumn added in v0.3.0

func FilterRecordByColumn(ctx context.Context, input arrow.Record, colName string, condition arrow.Array) (arrow.Record, error)

FilterRecordByColumn returns a new record with only rows where the condition on the column is true

func FilterRecordByColumnRange added in v0.4.0

func FilterRecordByColumnRange(ctx context.Context, input arrow.Record, colName string, min, max interface{}) (arrow.Record, error)

FilterRecordByColumnRange returns a new record with only rows where the column value is in the given range

func FilterRecordByColumnValue added in v0.4.0

func FilterRecordByColumnValue(ctx context.Context, input arrow.Record, colName string, val interface{}) (arrow.Record, error)

FilterRecordByColumnValue returns a new record with only rows where the column equals the given value

func GetColumn added in v0.4.0

func GetColumn(rec arrow.Record, name string) (arrow.Array, error)

GetColumn returns a column from a record batch by name

func GetColumnIndex added in v0.4.0

func GetColumnIndex(rec arrow.Record, name string) (int, error)

GetColumnIndex returns the index of a column in a record batch by name

func Greater added in v0.4.0

func Greater(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Greater returns a mask array indicating which elements of a are greater than b

func GreaterEqual added in v0.4.0

func GreaterEqual(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

GreaterEqual returns a mask array indicating which elements of a are greater than or equal to b

func GreaterEqualScalar added in v0.4.0

func GreaterEqualScalar(ctx context.Context, input arrow.Array, val interface{}) (arrow.Array, error)

GreaterEqualScalar returns a mask array indicating which elements are greater than or equal to the scalar value

func GreaterScalar added in v0.4.0

func GreaterScalar(ctx context.Context, input arrow.Array, val interface{}) (arrow.Array, error)

GreaterScalar returns a mask array indicating which elements are greater than the scalar value

func Invert added in v0.4.0

func Invert(ctx context.Context, input arrow.Array) (arrow.Array, error)

Invert performs logical NOT operation on a boolean array

func IsNull added in v0.4.0

func IsNull(ctx context.Context, input arrow.Array) (arrow.Array, error)

IsNull returns a mask array indicating which elements are null

func IsValid added in v0.4.0

func IsValid(ctx context.Context, input arrow.Array) (arrow.Array, error)

IsValid returns a mask array indicating which elements are not null

func Less added in v0.4.0

func Less(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Less returns a mask array indicating which elements of a are less than b

func LessEqual added in v0.4.0

func LessEqual(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

LessEqual returns a mask array indicating which elements of a are less than or equal to b

func LessEqualScalar added in v0.4.0

func LessEqualScalar(ctx context.Context, input arrow.Array, val interface{}) (arrow.Array, error)

LessEqualScalar returns a mask array indicating which elements are less than or equal to the scalar value

func LessScalar added in v0.4.0

func LessScalar(ctx context.Context, input arrow.Array, val interface{}) (arrow.Array, error)

LessScalar returns a mask array indicating which elements are less than the scalar value

func Max

func Max(ctx context.Context, input arrow.Array) (interface{}, error)

Max returns the maximum value in the array

func MaxColumn added in v0.4.0

func MaxColumn(ctx context.Context, rec arrow.Record, colName string) (interface{}, error)

MaxColumn returns the maximum value in a column

func Mean

func Mean(ctx context.Context, input arrow.Array) (float64, error)

Mean returns the mean of all elements in the array

func MeanColumn added in v0.4.0

func MeanColumn(ctx context.Context, rec arrow.Record, colName string) (float64, error)

MeanColumn returns the mean of a column in a record batch

func Min

func Min(ctx context.Context, input arrow.Array) (interface{}, error)

Min returns the minimum value in the array

func MinColumn added in v0.4.0

func MinColumn(ctx context.Context, rec arrow.Record, colName string) (interface{}, error)

MinColumn returns the minimum value in a column

func Mode added in v0.4.0

func Mode(ctx context.Context, input arrow.Array) (interface{}, error)

Mode returns the most common value in the array

func Multiply

func Multiply(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Multiply performs element-wise multiplication of two arrays

func MultiplyColumnScalar added in v0.4.0

func MultiplyColumnScalar(ctx context.Context, rec arrow.Record, colName string, val interface{}) (arrow.Record, error)

MultiplyColumnScalar multiplies a column in a record batch by a scalar

func MultiplyColumns added in v0.4.0

func MultiplyColumns(ctx context.Context, a, b arrow.Record, colName string) (arrow.Record, error)

MultiplyColumns multiplies corresponding columns from two record batches

func MultiplyScalar

func MultiplyScalar(ctx context.Context, a arrow.Array, val interface{}) (arrow.Array, error)

MultiplyScalar multiplies each element of an array by a scalar value

func Negate

func Negate(ctx context.Context, a arrow.Array) (arrow.Array, error)

Negate negates each element in an array

func NotEqual added in v0.4.0

func NotEqual(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

NotEqual returns a mask array indicating which elements are not equal

func NotEqualScalar added in v0.4.0

func NotEqualScalar(ctx context.Context, input arrow.Array, val interface{}) (arrow.Array, error)

NotEqualScalar returns a mask array indicating which elements are not equal to the scalar value

func NthElement

func NthElement(ctx context.Context, input arrow.Array, n int64, order SortOrder) (interface{}, error)

NthElement returns the nth element in sorted order

func Or added in v0.4.0

func Or(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Or performs logical OR operation on two boolean arrays

func Power

func Power(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Power raises each element in first array to the power of the corresponding element in second array

func PowerScalar

func PowerScalar(ctx context.Context, a arrow.Array, val interface{}) (arrow.Array, error)

PowerScalar raises each element of an array to a scalar power

func Rank

func Rank(ctx context.Context, input arrow.Array, order SortOrder) (arrow.Array, error)

Rank returns the rank of each element in the array

func ReleaseArray added in v0.4.0

func ReleaseArray(arr arrow.Array)

ReleaseArray safely releases an array if it's not nil

func ReleaseRecord added in v0.4.0

func ReleaseRecord(rec arrow.Record)

ReleaseRecord safely releases a record if it's not nil

func ReplaceRecordColumn added in v0.4.0

func ReplaceRecordColumn(rec arrow.Record, colIndex int, newCol arrow.Array) arrow.Record

ReplaceRecordColumn replaces a column in the record batch and returns a new record

func ReplaceRecordColumnByName added in v0.4.0

func ReplaceRecordColumnByName(rec arrow.Record, colName string, newCol arrow.Array) (arrow.Record, error)

ReplaceRecordColumnByName replaces a column in the record batch by name and returns a new record

func Sign

func Sign(ctx context.Context, a arrow.Array) (arrow.Array, error)

Sign returns the sign of each element (-1, 0, or 1)

func Sort

func Sort(ctx context.Context, input arrow.Array, order SortOrder) (arrow.Array, error)

Sort returns a sorted copy of the input array

func SortIndices added in v0.4.0

func SortIndices(ctx context.Context, input arrow.Array, order SortOrder) (arrow.Array, error)

SortIndices returns the indices that would sort the input array

func SortRecord added in v0.4.0

func SortRecord(ctx context.Context, input arrow.Record, sortCols []string, sortOrders []SortOrder) (arrow.Record, error)

SortRecord sorts a record by one or more columns

func SortRecordByColumn added in v0.3.0

func SortRecordByColumn(ctx context.Context, input arrow.Record, colName string, order SortOrder) (arrow.Record, error)

SortRecordByColumn sorts a record by a single column

func Sqrt added in v0.4.0

func Sqrt(ctx context.Context, a arrow.Array) (arrow.Array, error)

Sqrt calculates the square root of each element in an array

func StandardDeviation

func StandardDeviation(ctx context.Context, input arrow.Array) (float64, error)

StandardDeviation returns the standard deviation of the array

func StandardDeviationColumn added in v0.4.0

func StandardDeviationColumn(ctx context.Context, rec arrow.Record, colName string) (float64, error)

StandardDeviationColumn returns the standard deviation of a column

func Subtract

func Subtract(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Subtract performs element-wise subtraction of two arrays

func SubtractColumnScalar added in v0.4.0

func SubtractColumnScalar(ctx context.Context, rec arrow.Record, colName string, val interface{}) (arrow.Record, error)

SubtractColumnScalar subtracts a scalar from a column in a record batch

func SubtractColumns added in v0.4.0

func SubtractColumns(ctx context.Context, a, b arrow.Record, colName string) (arrow.Record, error)

SubtractColumns subtracts corresponding columns from two record batches

func SubtractScalar

func SubtractScalar(ctx context.Context, a arrow.Array, val interface{}) (arrow.Array, error)

SubtractScalar subtracts a scalar value from each element of an array

func Sum

func Sum(ctx context.Context, input arrow.Array) (interface{}, error)

Sum returns the sum of all elements in the array

func SumColumn added in v0.4.0

func SumColumn(ctx context.Context, rec arrow.Record, colName string) (interface{}, error)

SumColumn returns the sum of a column in a record batch

func TakeWithIndices

func TakeWithIndices(ctx context.Context, input arrow.Array, indices arrow.Array) (arrow.Array, error)

TakeWithIndices reorders elements of the array according to the indices

func UniqueValues

func UniqueValues(ctx context.Context, input arrow.Array) (arrow.Array, error)

UniqueValues returns the unique values in the array

func Variance

func Variance(ctx context.Context, input arrow.Array) (float64, error)

Variance returns the variance of the array

func VarianceColumn added in v0.4.0

func VarianceColumn(ctx context.Context, rec arrow.Record, colName string) (float64, error)

VarianceColumn returns the variance of a column

func Xor added in v0.4.0

func Xor(ctx context.Context, a, b arrow.Array) (arrow.Array, error)

Xor performs logical XOR operation on two boolean arrays

Types

type SortOrder

type SortOrder int

SortOrder specifies the order for sorting operations

const (
	// Ascending sort order (smallest to largest)
	Ascending SortOrder = iota
	// Descending sort order (largest to smallest)
	Descending
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL