A unified file reader for Parquet and Avro files with automatic format detection
Project description
Snavro
A unified file reader for Parquet and Avro files with automatic format detection.
Features
- 🚀 Automatic format detection - Just point to a file and Snavro figures out the format
- 📊 Multiple format support - Handles
.parquet,.parquet.snappy, and.avrofiles - 🖥️ CLI and Python API - Use from command line or import in your Python code
- 📈 Smart data preview - Shows file info, shape, columns, and sample data
- 🔧 Type hints - Full type annotation support for better IDE experience
Supported Formats
- Parquet files (
.parquet) - Snappy-compressed Parquet files (
.parquet.snappy) - Avro files (
.avro)
Installation
From PyPI (when published)
pip install snavro
From source
git clone https://github.com/yourusername/snavro.git
cd snavro
pip install -e .
Usage
Command Line Interface
Interactive mode
snavro
This will show you all supported files in the current directory and let you choose which one to examine.
Direct file access
# Show first 5 rows (default)
snavro myfile.parquet
# Show first 10 rows
snavro myfile.avro 10
# Works with snappy-compressed files too
snavro data.parquet.snappy 3
Python API
Basic usage
import snavro
# Simple function to read and display file info
snavro.read_and_display_file("myfile.parquet", num_rows=5)
Using the FileReader class
from snavro import FileReader
reader = FileReader()
# Check if a file is supported
if reader.is_supported_file("myfile.parquet"):
# Read the file (returns pandas DataFrame for Parquet, list of dicts for Avro)
data = reader.read_file("myfile.parquet")
# Or display file info with preview
reader.display_file_info("myfile.parquet", num_rows=10)
Working with the data
from snavro import FileReader
reader = FileReader()
# For Parquet files - returns pandas DataFrame
df = reader.read_parquet("data.parquet")
print(f"Shape: {df.shape}")
print(df.head())
# For Avro files - returns list of dictionaries
records = reader.read_avro("data.avro")
print(f"Number of records: {len(records)}")
print(records[0]) # First record
Utility functions
from snavro import get_supported_files
# Get all supported files in current directory
files = get_supported_files()
print(files)
# Get supported files in specific directory
files = get_supported_files("/path/to/data")
Example Output
Parquet File
Reading Parquet file: sales_data.parquet
--------------------------------------------------
Shape: (1000, 5)
Columns: ['date', 'product', 'sales', 'region', 'msg']
First few rows:
date product sales region msg
0 2023-01-01 Widget 100 North {"status": "active"}
1 2023-01-02 Gadget 150 South {"status": "pending"}
2 2023-01-03 Widget 75 East {"status": "active"}
First 'msg' value:
{"status": "active"}
Avro File
Reading Avro file: events.avro
--------------------------------------------------
Total records: 500
First 3 records:
Record 1:
{'timestamp': '2023-01-01T10:00:00Z', 'event': 'login', 'user_id': 12345}
Record 2:
{'timestamp': '2023-01-01T10:05:00Z', 'event': 'page_view', 'user_id': 12345}
Record 3:
{'timestamp': '2023-01-01T10:10:00Z', 'event': 'logout', 'user_id': 12345}
Development
Setup development environment
git clone https://github.com/yourusername/snavro.git
cd snavro
pip install -e ".[dev]"
Run tests
pytest
Code formatting
black snavro/
Type checking
mypy snavro/
Dependencies
- pandas >= 2.0.0 - For Parquet file handling
- pyarrow >= 10.0.0 - Parquet engine with compression support
- fastavro >= 1.8.0 - Fast Avro file reading
License
MIT License - see LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Changelog
0.1.0
- Initial release
- Support for Parquet and Avro files
- CLI and Python API
- Automatic format detection
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
snavro-0.1.0.tar.gz
(7.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters