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)
}
}