Konversi CSV ke Apache Parquet dengan Go-lang

CSV (comma separated values) adalah format data populer dan mudah digunakan. Di sisi lain Apache Parquet adalah format data tabular berorientasi kolom yang memiliki beberapa keunggulan dibanding CSV. Anda dapat mengonversi CSV ke Parquet menggunakan Go-lang ini.

Konversi CSV ke Apache Parquet dengan Go-lang

CSV (comma separated values) adalah salah satu format penyimpanan data tabular yang populer digunakan, mudah digunakan dan diubah karena tidak membutuhkan protokol khusus untuk membuat dan membacanya. Di sisi lain ada Apache Parquet, sebuah format penyimpanan data yang berorientasi kolom yang memiliki beberapa keunggulan; misalkan kita dapat melakukan kalkulasi agregat terhadap kolom dengan sangat cepat karena data sebuah kolom disimpan dalam blok halaman (pages) yang berurutan dan juga rasio kompresi data yang bagus. Kali ini saya akan menunjukan contoh sederhana untuk melakukan konversi data dari format CSV ke Apache Parquet menggunakan bahasa pemrograman Go-lang.

Persiapan

Contoh data yang digunakan dalam tulisan kali ini adalah "Crypto Data Hourly Price since 2017 to 2023-10" yang dapat diakses di situs Kaggle. Data ini dipilih karena ukurannya relatif cukup besar untuk contoh sederhana yaitu sekitar 90 Megabyte.

Lalu kita akan menggunakan salah satu library open-source untuk menulis data dalam format Apache Parquet. Kurang lebih struktur struct data yang digunakan di Go-lang sebagai berikut:

type PriceHistory struct {
	Date       string  `parquet:"name=date, type=BYTE_ARRAY, convertedtype=UTF8"`
	Symbol     string  `parquet:"name=symbol, type=BYTE_ARRAY, convertedtype=UTF8"`
	Open       float64 `parquet:"name=open, type=DOUBLE"`
	High       float64 `parquet:"name=high, type=DOUBLE"`
	Low        float64 `parquet:"name=low, type=DOUBLE"`
	Close      float64 `parquet:"name=close, type=DOUBLE"`
	VolumeUsdt int64   `parquet:"name=volume_usdt, type=INT64"`
	TradeCount int64   `parquet:"name=trade_count, type=INT64"`
	Token      string  `parquet:"name=token, type=BYTE_ARRAY, convertedtype=UTF8"`
	Hour       int     `parquet:"name=hour, type=INT32"`
	Day        string  `parquet:"name=day, type=BYTE_ARRAY, convertedtype=UTF8"`
}

Langkah-langkah

Pertama-tama silahkan unduh dataset CSV, lalu ekstrak file ZIP-nya. Kita akan menggunakan file bernama crypto_data.csv.

Selanjutnya Anda dapat menyiapkan proyek Go-lang code, sebagai awalan dapat melakukan git clone terhadap repositori GitHub yang sudah saya siapkan di andypmw/big-data-analytic.

Misalkan struktur direktori yang seperti ini:

/home/andy/code/go/src/github.com/andypmw/big-data-analytic

Anda dapat masuk ke folder berikut:

cd /home/andy/code/go/src/github.com/andypmw/big-data-analytic/convert-csv-to-parquet-using-golang/cmd/converter/

Bisa melakukan instalasi pustaka Go-lang yang diperlukan dengan perintah ini:

go mod tidy

Selanjutnya silahkan salin file CSV yang diperlukan ke dalam folder tadi. Kita perlu membuang baris pertama dari file CSV tersebut (yang berisi judul kolom) dengan perintah berikut (di Linux atau Mac):

tail -n +2 crypto_data.csv > crypto-price-history.csv

Selanjutnya kita bisa mencoba menjalankan source code Go-lang untuk melakukan konversi file CSV menjadi file Apache Parquet dengan perintah berikut:

go run main.go

Jika eksekusi Go-lang berhasil, Anda akan mendapatkan hasil akhir kurang lebih seperti ini:

Contoh hasil eksekusi konversi CSV menjadi Apache Parquet menggunakan Go-lang