Path: blob/main/crates/polars-io/src/parquet/write/options.rs
8484 views
use arrow::datatypes::ArrowSchemaRef;1use polars_core::prelude::CompatLevel;2use polars_parquet::write::{3BrotliLevel, CompressionOptions, GzipLevel, StatisticsOptions, ZstdLevel,4};5#[cfg(feature = "serde")]6use serde::{Deserialize, Serialize};78use super::KeyValueMetadata;910#[derive(Default, Clone, Debug, PartialEq, Hash, Eq)]11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]12#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]13pub struct ParquetWriteOptions {14/// Data page compression15pub compression: ParquetCompression,16/// Compute and write column statistics.17pub statistics: StatisticsOptions,18/// If `None` will be all written to a single row group.19pub row_group_size: Option<usize>,20/// if `None` will be 1024^2 bytes21pub data_page_size: Option<usize>,22/// Custom file-level key value metadata23pub key_value_metadata: Option<KeyValueMetadata>,24pub arrow_schema: Option<ArrowSchemaRef>,25#[cfg_attr(feature = "serde", serde(default))]26pub compat_level: Option<CompatLevel>,27}2829impl ParquetWriteOptions {30pub fn compat_level(&self) -> CompatLevel {31self.compat_level.unwrap_or(CompatLevel::oldest())32}33}3435/// The compression strategy to use for writing Parquet files.36#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]37#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]38#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]39pub enum ParquetCompression {40Uncompressed,41Snappy,42Gzip(Option<GzipLevel>),43Brotli(Option<BrotliLevel>),44Zstd(Option<ZstdLevel>),45Lz4Raw,46}4748impl Default for ParquetCompression {49fn default() -> Self {50Self::Zstd(None)51}52}5354impl From<ParquetCompression> for CompressionOptions {55fn from(value: ParquetCompression) -> Self {56use ParquetCompression::*;57match value {58Uncompressed => CompressionOptions::Uncompressed,59Snappy => CompressionOptions::Snappy,60Gzip(level) => CompressionOptions::Gzip(level),61Brotli(level) => CompressionOptions::Brotli(level),62Lz4Raw => CompressionOptions::Lz4Raw,63Zstd(level) => CompressionOptions::Zstd(level),64}65}66}676869