How to Read and Write Parquet Files in Go

The Go standard library does not natively support Parquet files; you must use a third-party library like `github.com/xitongsys/parquet-go`. Install the library, import it, and use `parquet.WriteParquetFile` to write and `parquet.ReadParquetFile` to read data.

How to Read and Write Parquet Files in Go

The Go standard library does not natively support Parquet files; you must use a third-party library like github.com/xitongsys/parquet-go. Install the library, import it, and use parquet.WriteParquetFile to write and parquet.ReadParquetFile to read data.

package main

import (
	"fmt"

	"github.com/xitongsys/parquet-go-source/local"
	"github.com/xitongsys/parquet-go/parquet"
	"github.com/xitongsys/parquet-go/reader"
	"github.com/xitongsys/parquet-go/writer"
)

type Record struct {
	Name string `parquet:"name=Name, type=BYTE_ARRAY, convertedtype=UTF8"`
	Age  int    `parquet:"name=Age, type=INT32"`
}

func main() {
	// Write
	fw, err := local.NewLocalFileWriter("data.parquet")
	if err != nil {
		fmt.Println("Error creating file writer:", err)
		return
	}
	pw, err := writer.NewParquetWriter(fw, new(Record), 4)
	if err != nil {
		fmt.Println("Error creating parquet writer:", err)
		return
	}

	pw.Write(Record{"Alice", 30})
	pw.Write(Record{"Bob", 25})
	if err := pw.WriteStop(); err != nil {
		fmt.Println("Error stopping write:", err)
		return
	}

	// Read
	fr, err := local.NewLocalFileReader("data.parquet")
	if err != nil {
		fmt.Println("Error creating file reader:", err)
		return
	}
	pqReader, err := reader.NewParquetReader(fr, new(Record), 4)
	if err != nil {
		fmt.Println("Error creating parquet reader:", err)
		return
	}

	var out []Record
	if err := pqReader.Read(&out); err != nil {
		fmt.Println("Error reading parquet:", err)
		return
	}

	for _, r := range out {
		fmt.Println(r.Name, r.Age)
	}
}