PHPackages                             ptondereau/parquet-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. ptondereau/parquet-php

Abandoned → [flow-php/arrow-ext](/?search=flow-php%2Farrow-ext)ArchivedPhp-ext[File &amp; Storage](/categories/file-storage)

ptondereau/parquet-php
======================

PHP extension for reading and writing Apache Parquet files, powered by arrow-rs

v0.1.0(3mo ago)00MITRustPHP ^8.2CI passing

Since Mar 20Pushed 3mo agoCompare

[ Source](https://github.com/ptondereau/php-arrow-rs-ext)[ Packagist](https://packagist.org/packages/ptondereau/parquet-php)[ RSS](/packages/ptondereau-parquet-php/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

parquet-php
===========

[](#parquet-php)

[![CI](https://github.com/ptondereau/php-arrow-rs-ext/actions/workflows/tests.yml/badge.svg)](https://github.com/ptondereau/php-arrow-rs-ext/actions/workflows/tests.yml) [![License: MIT](https://camo.githubusercontent.com/08cef40a9105b6526ca22088bc514fbfdbc9aac1ddbf8d4e6c750e3a88a44dca/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e737667)](LICENSE)

A PHP extension for reading and writing Apache Parquet files, powered by Rust and [arrow-rs](https://github.com/apache/arrow-rs).

Supports all primitive types, nested types (lists, structs, maps), 6 compression codecs, column projection, and in-memory I/O. Requires PHP 8.2+.

Installation
------------

[](#installation)

### PIE

[](#pie)

```
pie install ptondereau/parquet-php
```

PIE downloads a prebuilt binary for your platform. If none is available, it builds from source (requires the Rust toolchain).

### Prebuilt binaries

[](#prebuilt-binaries)

Prebuilt binaries are published on [GitHub Releases](https://github.com/ptondereau/php-arrow-rs-ext/releases) for PHP 8.2–8.5 (NTS and ZTS):

OSArchLibcLinuxx64glibc, muslLinuxarm64glibc, muslmacOSx64—macOSarm64—### Build from source

[](#build-from-source)

```
# Requires Rust toolchain (https://rustup.rs)
cargo build --release
cp target/release/libparquet.so "$(php-config --extension-dir)/parquet.so"
```

### Loading

[](#loading)

```
; php.ini
extension=parquet.so
```

Usage
-----

[](#usage)

### Defining a schema

[](#defining-a-schema)

```
use Parquet\Column;
use Parquet\Schema;

$schema = Schema::create([
    Column::int64('id')->required(),
    Column::string('name'),
    Column::double('price'),
    Column::boolean('active'),
    Column::date('created_at'),
    Column::decimal('amount', 10, 2),
]);
```

### Writing a file

[](#writing-a-file)

```
use Parquet\Writer;
use Parquet\WriterOptions;
use Parquet\Compression;

$writer = new Writer(
    WriterOptions::create()->withCompression(Compression::Snappy)
);

$writer->write('data.parquet', $schema, [
    ['id' => 1, 'name' => 'Alice', 'price' => 9.99, 'active' => true, 'created_at' => '2024-01-15', 'amount' => '123.45'],
    ['id' => 2, 'name' => 'Bob',   'price' => 4.50, 'active' => false, 'created_at' => '2024-02-20', 'amount' => '67.89'],
]);
```

### Incremental writing

[](#incremental-writing)

```
$writer = new Writer();
$writer->open('large.parquet', $schema);

foreach (array_chunk($rows, 10_000) as $batch) {
    $writer->writeBatch($batch);
}

$writer->close();
```

### Reading a file

[](#reading-a-file)

```
use Parquet\Reader;
use Parquet\ReaderOptions;

$reader = new Reader(
    ReaderOptions::create()
        ->withBatchSize(5000)
        ->withColumns(['id', 'name'])
);

$file = $reader->open('data.parquet');

echo $file->metadata()->rowCount(); // total rows

while ($batch = $file->readBatch()) {
    foreach ($batch as $row) {
        echo $row['name'];
    }
}
```

### Nested types

[](#nested-types)

```
$schema = Schema::create([
    Column::string('name')->required(),
    Column::list('tags', Column::string('element')),
    Column::struct('address', [
        Column::string('street'),
        Column::string('city'),
        Column::string('zip'),
    ]),
    Column::map('metadata', Column::string('key'), Column::int32('value')),
]);

$writer = new Writer();
$writer->write('nested.parquet', $schema, [
    [
        'name' => 'Alice',
        'tags' => ['admin', 'active'],
        'address' => ['street' => '123 Main St', 'city' => 'Paris', 'zip' => '75001'],
        'metadata' => ['login_count' => 42, 'score' => 100],
    ],
]);
```

### In-memory I/O

[](#in-memory-io)

```
$writer = new Writer();
$buffer = $writer->writeToString($schema, $rows);

$reader = new Reader();
$file = $reader->openString($buffer);

while ($batch = $file->readBatch()) {
    // ...
}
```

### Compression

[](#compression)

Six codecs are supported: `Uncompressed`, `Snappy`, `Gzip`, `Brotli`, `Lz4Raw`, `Zstd`.

```
use Parquet\Compression;
use Parquet\Encoding;

$options = WriterOptions::create()
    ->withCompression(Compression::Zstd)
    ->withColumnCompression('payload', Compression::Snappy)
    ->withColumnEncoding('id', Encoding::DeltaBinaryPacked);
```

Supported types
---------------

[](#supported-types)

TypeColumn factoryPHP representationBoolean`Column::boolean()``bool`Int32`Column::int32()``int`Int64`Column::int64()``int`Float`Column::float()``float`Double`Column::double()``float`String`Column::string()``string`Date`Column::date()``string` (Y-m-d)DateTime`Column::dateTime()``string` (ISO 8601)Time`Column::time()``string` (H:i:s.u)Decimal`Column::decimal()``string`JSON`Column::json()``string`Enum`Column::enum()``string`UUID`Column::uuid()``string`Binary`Column::binary()``string`List`Column::list()``array`Struct`Column::struct()``array` (assoc)Map`Column::map()``array` (assoc)All columns are nullable by default. Call `->required()` to enforce non-null.

For the full API, see [`parquet.stubs.php`](parquet.stubs.php).

Contributing
------------

[](#contributing)

See [CONTRIBUTING.md](CONTRIBUTING.md).

License
-------

[](#license)

MIT

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance82

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity36

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

95d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/267503386?v=4)[rooferz](/maintainers/rooferz)[@Rooferz](https://github.com/Rooferz)

---

Top Contributors

[![ptondereau](https://avatars.githubusercontent.com/u/4287777?v=4)](https://github.com/ptondereau "ptondereau (5 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ptondereau-parquet-php/health.svg)

```
[![Health](https://phpackages.com/badges/ptondereau-parquet-php/health.svg)](https://phpackages.com/packages/ptondereau-parquet-php)
```

###  Alternatives

[venveo/craft-compress

Create smart zip files from Craft assets on the fly

124.7k](/packages/venveo-craft-compress)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
