Installs into .claude/skills of the current project.
Are you the author of Arrow Tabular Data Reading?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/holobiomicslab-arrow-tabular-data-reading)
---
name: arrow-tabular-data-reading
description: Use when when you have Parquet-encoded tabular data (e.
license: CC-BY-4.0
metadata:
edam_operation: http://edamontology.org/operation_3434
edam_topics:
- http://edamontology.org/topic_3520
- http://edamontology.org/topic_0945
tools:
- OpenMS
- arrow
- R
- arrow (R package)
- pyarrow (Python library)
- mobiusklein/mzpeak_prototyping
derived_from:
- doi: 10.1021/acs.jproteome.5c00435
title: mzpeak
evidence_spans:
- complete re-implementation using the [`arrow`] for _reading_ only
- There is also an R implementation in `R/`
claims: []
provenance:
collection: https://w3id.org/holobiomicslab/asb-skill/collection/metabolomics/v1
assembled_by: scripts/collect_metabolomics_collection.py
sources:
- build: coll_mzpeak
doi: 10.1021/acs.jproteome.5c00435
title: mzpeak
dedup_kept_from: coll_mzpeak
schema_version: 0.2.0
---
# arrow-tabular-data-reading
## Summary
Read and parse binary tabular data (Parquet files) into structured in-memory columnar representations using Apache Arrow's language bindings. This skill enables efficient, schema-aware loading of mass spectrometry metadata and signal arrays without materializing the entire dataset into memory.
## When to use
When you have Parquet-encoded tabular data (e.g., mzPeak spectrum metadata or chromatogram signal tables) that needs to be loaded into R or Python for downstream analysis, and you want to leverage Arrow's zero-copy, columnar memory layout and lazy evaluation to handle large files efficiently.
## When NOT to use
- Input is already a native in-memory data frame or table—avoid unnecessary Arrow round-trip conversion.
- You need to write or modify Parquet files—R and Python Arrow implementations support read-only access at this time.
- File is in a non-Parquet format (mzML, raw vendor formats, etc.); use format-specific readers instead.
## Inputs
- Parquet file (binary columnar format)
- File path to mzPeak archive component (e.g., spectra_metadata.parquet, spectra_data.parquet, chromatograms_metadata.parquet)
- Optional: Parquet schema or column selection filter
## Outputs
- Arrow Table (zero-copy columnar in-memory representation)
- Converted data frame (R data.frame or pandas.DataFrame if row-oriented access needed)
- Structured representation of spectrum or chromatogram metadata and signal arrays with validated schema
## How to apply
Load the Arrow library for your language (arrow R package or pyarrow Python package). Open the Parquet file using the library's read function, which automatically infers or respects the Parquet schema. The resulting object is a columnar table (Arrow Table or RecordBatch collection) with named columns corresponding to the Parquet schema fields (e.g., spectrum_index, mz, intensity for spectra_data.parquet in mzPeak archives). Convert to a language-native data frame (R data.frame or Python pandas.DataFrame) only if row-oriented access or further transformation is required. Validate that the loaded table has the expected column names, data types, and row count matching the file's Parquet metadata.
## Related tools
- **arrow (R package)** (Parquet reading and columnar in-memory representation for R; provides zero-copy data access and lazy evaluation) — https://arrow.apache.org/docs/r/
- **pyarrow (Python library)** (Parquet reading and columnar in-memory representation for Python; integrates with PyData stack) — https://arrow.apache.org/docs/python/index.html
- **mobiusklein/mzpeak_prototyping** (Reference R implementation demonstrating arrow-based mzPeak file reading workflow) — https://github.com/mobiusklein/mzpeak_prototyping
## Examples
```
library(arrow)
spectra_data <- read_parquet('spectra_data.parquet')
spectra_df <- as.data.frame(spectra_data)
```
## Evaluation signals
- Loaded table schema matches the Parquet file's declared schema (column names, data types, nullability).
- Column count and row count match the Parquet metadata (number of spectra/chromatograms × points per spectrum).
- Expected spectrum fields are present and non-empty (e.g., spectrum_index, mz, intensity for signal tables).
- Data types are appropriate (numeric for m/z and intensity; integer for indices; struct for nested metadata like precursors).
- No unexpected null or missing values in non-nullable columns; null values only in optional grouped fields (e.g., precursor data for spectra without MS/MS).
## Limitations
- R and Python Arrow implementations support reading only; writing mzPeak files requires the Rust implementation.
- Arrow's lazy evaluation may defer error detection until data is explicitly materialized; always validate schema before assuming correctness.
- Memory overhead scales with uncompressed Parquet data size; for very large spectra_data.parquet files, consider reading by column or using chunked access rather than loading the entire table.
- Project is work-in-progress with no stability guarantee; API and file format may change.
## Evidence
- [readme] There is a separate Python implementation in `python/` which is a complete re-implementation for _reading_ mzPeak files using [`pyarrow`]: "There is a separate Python implementation in `python/` which is a complete re-implementation for _reading_ mzPeak files using [`pyarrow`]"
- [readme] There is also an R implementation in `R/`, which is also a complete re-implementation using the [`arrow`] for _reading_ only at this time.: "There is also an R implementation in `R/`, which is also a complete re-implementation using the [`arrow`] for _reading_ only at this time."
- [other] Use the R read function from the R/ implementation to open a valid mzPeak file. Extract spectrum data and convert to a structured tabular format (data frame). Validate that the output contains expected spectrum fields and rows.: "Use the R read function from the R/ implementation to open a valid mzPeak file. Extract spectrum data and convert to a structured tabular format (data frame). Validate that the output contains"
- [readme] mzPeak is a archive of multiple [Parquet](https://parquet.apache.org/) files, stored directly in an _uncompressed_ [ZIP] archive. Each Parquet file describes a different facet of the stored mass spectrometry run.: "mzPeak is a archive of multiple [Parquet](https://parquet.apache.org/) files, stored directly in an _uncompressed_ [ZIP] archive. Each Parquet file describes a different facet of the stored mass"
- [readme] spectra_data.parquet: Spectrum signal data in either profile or centroid mode. May be in point layout or chunked layout: "spectra_data.parquet: Spectrum signal data in either profile or centroid mode. May be in point layout or chunked layout"