Parmi Notes Random short any article
Posted on
β€’ author - penulis

Apa itu Parquet File Format?

Author

Berikut rangkuman dari artikel β€œApa itu Parquet File Format?” di Ngoolie:

πŸ“Œ Apa itu Parquet?

  • Apache Parquet adalah format file open source berbasis kolom.
  • Dirancang untuk penyimpanan dan pengambilan data yang efisien, terutama untuk big data dan data science.
  • Mendukung kompresi dan encoding data yang optimal, sehingga cocok untuk data kompleks dalam jumlah besar.

πŸ”‘ Karakteristik Parquet

  • Gratis dan open source.
  • Bahasa agnostik (bisa digunakan di berbagai bahasa pemrograman).
  • Berbasis kolom, bukan baris β†’ hemat ruang dan mempercepat query analitik.
  • Efisien dalam kompresi/dekompresi.
  • Mendukung tipe data kompleks dan nested structures.

🌟 Manfaat Parquet

  • Cocok untuk menyimpan data besar (tabel, gambar, video, dokumen).
  • Menghemat ruang penyimpanan di cloud berkat kompresi kolom.
  • Meningkatkan kinerja query karena hanya membaca kolom yang dibutuhkan.
  • Minimalkan I/O saat mengakses data.

πŸ“Š Keuntungan Format Kolom

  • Query lebih cepat karena bisa melewati data yang tidak relevan.
  • Mendukung struktur data bersarang.
  • Kompresi fleksibel per kolom β†’ file lebih kecil, query lebih efisien.
  • Optimal untuk layanan serverless seperti AWS Athena, Amazon Redshift Spectrum, Google BigQuery.

πŸ”„ Perbandingan Parquet vs CSV

Aspek CSV Parquet
Ukuran di Amazon S3 1 TB 130 GB
Waktu Query 236 detik 6,78 detik
Data yang discan 1,15 TB 2,51 GB
Biaya $5,75 $0,01
Efisiensi β€” 87% lebih hemat storage, 34x lebih cepat, 99,7% lebih hemat biaya

🎯 Kesimpulan

Parquet jauh lebih efisien dibanding CSV dalam hal penyimpanan, kecepatan query, dan biaya. Format ini sangat direkomendasikan untuk big data analytics dan penggunaan cloud computing.

---

πŸ“Œ Contoh dengan Pandas

import pandas as pd

# Membuat DataFrame sederhana
data = {
    "nama": ["Andi", "Budi", "Citra"],
    "usia": [25, 30, 28],
    "kota": ["Jakarta", "Bandung", "Surabaya"]
}
df = pd.DataFrame(data)

# Simpan ke file Parquet
df.to_parquet("data.parquet", engine="pyarrow", index=False)

# Baca kembali file Parquet
df_parquet = pd.read_parquet("data.parquet", engine="pyarrow")
print(df_parquet)

πŸ‘‰ Kelebihan: mudah digunakan, cocok untuk dataset kecil-menengah.


πŸ“Œ Contoh dengan PySpark

from pyspark.sql import SparkSession

# Inisialisasi Spark
spark = SparkSession.builder.appName("ParquetExample").getOrCreate()

# Membuat DataFrame Spark
data = [("Andi", 25, "Jakarta"),
        ("Budi", 30, "Bandung"),
        ("Citra", 28, "Surabaya")]
columns = ["nama", "usia", "kota"]

df = spark.createDataFrame(data, columns)

# Simpan ke file Parquet
df.write.parquet("data_spark.parquet")

# Baca kembali file Parquet
df_parquet = spark.read.parquet("data_spark.parquet")
df_parquet.show()

πŸ‘‰ Kelebihan: sangat efisien untuk big data dan integrasi dengan ekosistem Hadoop/Spark.


Kalau kamu lebih sering bekerja dengan data kecil-menengah, cukup gunakan Pandas. Tapi kalau sudah masuk ke big data pipeline (misalnya di Hadoop, Spark, atau AWS EMR), maka PySpark lebih tepat.

Ya, benar sekali β€” Parquet memang jauh lebih efisien dibanding format tradisional seperti CSV, terutama untuk data besar dan kompleks. Berikut penjelasan berdasarkan hasil riset terbaru:


πŸ”‘ Mengapa Parquet Lebih Efisien?

  • Format kolom: Data disimpan per kolom, bukan per baris. Ini membuat query analitik lebih cepat karena hanya kolom yang relevan dibaca.
  • Kompresi tinggi: Parquet mendukung kompresi per kolom (misalnya Snappy, Gzip), sehingga ukuran file bisa jauh lebih kecil dibanding CSV atau JSON.
  • Optimasi untuk big data: Sangat cocok digunakan dengan framework seperti Apache Spark, Hadoop, Hive, dan AWS Athena.
  • Efisiensi biaya cloud: Karena ukuran file lebih kecil, biaya penyimpanan dan query di layanan cloud (misalnya Amazon S3, BigQuery) bisa turun drastis.

πŸ“Š Perbandingan Parquet vs CSV

Aspek CSV Parquet
Ukuran file Besar (raw text) Lebih kecil (kompresi kolom)
Kecepatan query Lambat (scan semua data) Cepat (scan kolom relevan)
Biaya cloud Tinggi (banyak data discan) Rendah (data lebih kecil)
Kompleksitas data Terbatas (flat table) Mendukung nested & kompleks

Contoh nyata: sebuah dataset 1 TB dalam CSV bisa dikompresi menjadi hanya ~130 GB dalam Parquet, dengan query 34x lebih cepat dan biaya hampir 99% lebih murah.


🎯 Kesimpulan

  • Parquet unggul untuk data besar, analitik, dan penggunaan cloud.
  • CSV masih berguna untuk interoperabilitas sederhana (misalnya berbagi data antar sistem atau dibuka di Excel).
  • Jika fokusmu adalah efisiensi, kecepatan, dan biaya, maka Parquet adalah pilihan yang lebih kuat.

Parquet memang dirancang khusus untuk efisiensi dalam menangani data besar dan kompleks. Supaya lebih nyata, mari kita lihat benchmark kecil dengan Python yang membandingkan ukuran file CSV vs Parquet dari dataset yang sama.


πŸ“Œ Contoh Benchmark dengan Pandas

import pandas as pd
import numpy as np
import os

# Buat dataset dummy dengan 1 juta baris
data = {
    "id": np.arange(1, 1000001),
    "nama": np.random.choice(["Andi", "Budi", "Citra", "Dewi"], size=1000000),
    "usia": np.random.randint(18, 60, size=1000000),
    "kota": np.random.choice(["Jakarta", "Bandung", "Surabaya", "Medan"], size=1000000)
}
df = pd.DataFrame(data)

# Simpan ke CSV
df.to_csv("data.csv", index=False)

# Simpan ke Parquet
df.to_parquet("data.parquet", engine="pyarrow", index=False)

# Bandingkan ukuran file
csv_size = os.path.getsize("data.csv") / (1024*1024)   # MB
parquet_size = os.path.getsize("data.parquet") / (1024*1024)  # MB

print(f"Ukuran CSV: {csv_size:.2f} MB")
print(f"Ukuran Parquet: {parquet_size:.2f} MB")

πŸ“Š Hasil yang biasanya terlihat

  • CSV: sekitar 150–200 MB
  • Parquet: hanya 30–40 MB

πŸ‘‰ Artinya, Parquet bisa 4–6 kali lebih kecil dibanding CSV untuk dataset yang sama.
Selain itu, saat membaca file, Parquet jauh lebih cepat karena hanya membaca kolom yang diperlukan.


🎯 Kesimpulan

  • Parquet unggul dalam hal ukuran file, kecepatan query, dan efisiensi biaya cloud.
  • CSV tetap berguna untuk interoperabilitas sederhana (misalnya dibuka di Excel).
  • Untuk big data analytics, Parquet adalah pilihan yang lebih kuat dan hemat.

Menarik pertanyaanmu πŸ‘. Jadi, apakah Parquet bisa dimanfaatkan di shared hosting (Linux hosting tradisional)? Jawabannya: secara teknis bisa, tapi jarang dipakai di skenario hosting tradisional.


πŸ”‘ Kenapa jarang dipakai di shared hosting?

  • Parquet ditujukan untuk big data analytics: biasanya digunakan di ekosistem Hadoop, Spark, AWS Athena, Google BigQuery, atau data lake.
  • Shared hosting (Linux cPanel, dsb.) umumnya dipakai untuk website (PHP, MySQL, WordPress), bukan untuk analitik data besar.
  • Library seperti PyArrow atau Fastparquet memang bisa diinstal di Linux environment, tapi di shared hosting biasanya ada keterbatasan akses root dan resource.

πŸ“Š Perbandingan Lingkungan

Lingkungan Cocok untuk Parquet? Catatan
Shared Hosting (cPanel, PHP, MySQL) Tidak optimal Fokus ke web hosting, database relasional, keterbatasan resource.
VPS / Dedicated Server (Linux) Bisa Kamu bebas install Python, Spark, Hadoop, PyArrow, dll.
Cloud Data Platforms (AWS, GCP, Azure) Sangat cocok Native support untuk Parquet, efisiensi tinggi untuk query besar.

🎯 Kesimpulan

  • Di shared hosting Linux: bisa dipakai kalau sekadar menyimpan/olah file Parquet dengan Python, tapi tidak ideal untuk analitik besar.
  • Untuk data besar/kompleks: lebih baik gunakan VPS, server dedicated, atau cloud data warehouse.
  • Parquet memang β€œkuat” untuk data besar, tapi kekuatannya baru terasa di ekosistem big data, bukan di hosting tradisional.

πŸ‘‰ Jadi kalau tujuanmu hanya eksperimen kecil (misalnya simpan dataset di Parquet dan baca dengan Pandas), itu bisa dilakukan di shared hosting jika hosting mendukung Python. Tapi kalau tujuannya analitik skala besar, lebih baik pindah ke VPS atau cloud.

Mau saya tunjukkan contoh setup minimal di Linux server (VPS) untuk mulai pakai Parquet dengan Python + PyArrow?

========== contoh query:

import pandas as pd import time

Baca file CSV hanya kolom tertentu

start_csv = time.time() df_csv = pd.read_csv("data.csv", usecols=["nama", "usia"]) end_csv = time.time() print(f"Waktu baca CSV: {end_csv - start_csv:.2f} detik")

Baca file Parquet hanya kolom tertentu

start_parquet = time.time() df_parquet = pd.read_parquet("data.parquet", columns=["nama", "usia"]) end_parquet = time.time() print(f"Waktu baca Parquet: {end_parquet - start_parquet:.2f} detik")