๋ฐ์ดํฐ ๋ถ์๊ณผ ๋จธ์ ๋ฌ๋์ ํ๋ค ๋ณด๋ฉด CSV, JSON, Excel ๋ฑ์ ํ์ผ ํฌ๋งท์ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ค. ํ์ง๋ง ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋๋ ์๋์ ์ ์ฅ ํจ์จ์ฑ์ด ์ค์ํ๋ฐ, ์ด๋ด ๋ Parquet ํฌ๋งท์ด ๊ฐ๋ ฅํ ๋์์ด ๋ ์ ์๋ค.
1. Parquet๋?
Apache Parquet๋ ์ปฌ๋ผ ๊ธฐ๋ฐ ์ ์ฅ ๋ฐฉ์(columnar storage format)์ ์ฌ์ฉํ๋ ์คํ์์ค ๋ฐ์ดํฐ ํฌ๋งท์. Hadoop ์ํ๊ณ์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ถ์ ์ฑ๋ฅ์ ๊ทน๋ํํ๋ ๋ฐ ์ต์ ํ๋จ.
ํน์ง
- ์ปฌ๋ผ ๊ธฐ๋ฐ ์ ์ฅ(Columnar Storage)
- CSV๋ JSON ๊ฐ์ ํฌ๋งท์ ๋ฐ์ดํฐ๋ฅผ ํ(Row) ๋จ์๋ก ์ ์ฅํ์ง๋ง, Parquet์ ์ปฌ๋ผ(Column) ๋จ์๋ก ์ ์ฅํจ
- ํน์ ์ปฌ๋ผ๋ง ์ฝ์ด๋ ๋๋ฏ๋ก, ๋ถ์ ์๋๊ฐ ํฅ์๋จ
- ์์ถ ๋ฐ ์ธ์ฝ๋ฉ(Compression & Encoding)
- ์ปฌ๋ผ๋ณ๋ก ์์ถ์ ์ ์ฉํ์ฌ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ๊ณ , ๋น ๋ฅธ ์ฝ๊ธฐ ์ฑ๋ฅ์ ์ ๊ณตํจ
- ๊ธฐ๋ณธ์ ์ผ๋ก Snappy, Gzip, LZO ๋ฑ์ ์์ถ ๋ฐฉ์์ ์ง์ํจ
- ์คํค๋ง ์ ์ฅ(Schema Evolution)
- ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์คํค๋ง(๋ฐ์ดํฐ ๊ตฌ์กฐ)๋ฅผ ํจ๊ป ์ ์ฅํ์ฌ, ๋ค์ํ ์ธ์ด ๋ฐ ํด์์ ์ฝ๊ฒ ํ์ฉ ๊ฐ๋ฅํจ
- ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- Spark, Pandas, Hadoop, Dask ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ต์ ํ๋์ด ์ฌ์ฉ๋จ
2. Parquet vs CSV vs JSON
ํฌ๋งท | ์ ์ฅ ๋ฐฉ์ | ์์ถ ์ง์ | ์ฝ๊ธฐ ์ฑ๋ฅ | ์ฐ๊ธฐ ์ฑ๋ฅ | ์ฉ๋ ํจ์จ์ฑ |
CSV | ํ ๊ธฐ๋ฐ | X | ๋๋ฆผ | ๋น ๋ฆ | ๋นํจ์จ์ |
JSON | ๊ณ์ธตํ | O | ๋๋ฆผ | ๋๋ฆผ | ์ค๊ฐ |
Parquet | ์ปฌ๋ผ ๊ธฐ๋ฐ | O | ๋น ๋ฆ | ์ค๊ฐ | ํจ์จ์ |
๋น๊ต ์์ฝ
- CSV: ํ ์คํธ ํ์ผ์ด๋ผ ๊ฐ๋ ์ฑ์ด ์ข์ง๋ง, ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋นํจ์จ์ ์
- JSON: ๊ณ์ธตํ ๊ตฌ์กฐ๋ผ ์ ์ฐ์ฑ์ด ๋์ง๋ง, ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ์๋๊ฐ ๋๋ ค์ง
- Parquet: ์ปฌ๋ผ ๋จ์๋ก ์ ์ฅํ์ฌ ์ฝ๊ธฐ ์ฑ๋ฅ์ด ๊ฐ์ฅ ๋ฐ์ด๋๊ณ ์ฉ๋๋ ํจ์จ์ ์
3. Parquet ํ์ผ ์ฌ์ฉ ๋ฐฉ๋ฒ (Python)
Python์์ pandas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Parquet ํ์ผ์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์.
3.1. ์ค์น
Parquet ํฌ๋งท์ ์ฌ์ฉํ๋ ค๋ฉด pyarrow ๋๋ fastparquet ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํจ.
pip install pandas pyarrow fastparquet
import pandas as pd
# ์ํ ๋ฐ์ดํฐ ์์ฑ
data = {
'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, 30, 35],
'city': ['Seoul', 'Busan', 'Incheon']
}
df = pd.DataFrame(data)
# Parquet ํ์ผ๋ก ์ ์ฅ
df.to_parquet('data.parquet', engine='pyarrow', compression='snappy')
3.3. ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
# Parquet ํ์ผ ์ฝ๊ธฐ
df = pd.read_parquet('data.parquet', engine='pyarrow')
print(df)
# name age city
# 0 Alice 25 Seoul
# 1 Bob 30 Busan
# 2 Charlie 35 Incheon
4. Parquet์ด ์ ์ฉํ ๊ฒฝ์ฐ
- ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌ: Spark, Dask ๊ฐ์ ๋ถ์ฐ ์ฒ๋ฆฌ ์์คํ ์์ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฑ๋ฅ์ ์ ๊ณตํจ
- ํด๋ผ์ฐ๋ ์ ์ฅ: Amazon S3, Google Cloud Storage ๊ฐ์ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์์ ํจ์จ์ ์ผ๋ก ํ์ฉ ๊ฐ๋ฅํจ
- ๋จธ์ ๋ฌ๋ ๋ฐ์ดํฐ์ : ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์๋์ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์
5. ๊ฒฐ๋ก
Parquet ํ์ผ์ ์ปฌ๋ผ ๊ธฐ๋ฐ ์ ์ฅ ๋ฐฉ์, ๋ฐ์ด๋ ์์ถ ์ฑ๋ฅ, ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฝ๊ธฐ ์๋ ๋๋ถ์ ๋์ฉ๋ ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ๋จธ์ ๋ฌ๋ ํ๋ก์ ํธ์์ ๋งค์ฐ ์ ์ฉํจ. CSV๋ณด๋ค ๋ ํจ์จ์ ์ด๋ฉฐ, ํนํ ๋น ๋ฐ์ดํฐ ํ๊ฒฝ์์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ๋ฐํํจ.
CSV๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ค๋ฉด Parquet์ผ๋ก ๋ณํํ๋ ๊ฒ๋ง์ผ๋ก๋ ์๋์ ์ ์ฅ ๊ณต๊ฐ์ ์ต์ ํํ ์ ์์
'๊ฐ๋ฐ Code > ํ์ด์ฌ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python][pandas] DataFrame ํ๋ณ ์ํ(iterate) ๋ฐฉ๋ฒ ์ ๋ฆฌ (0) | 2025.02.24 |
---|---|
[Python][pandas] Sorting Data - sort (0) | 2025.02.13 |
[Python][pandas] Loading Data - Excel (0) | 2025.02.13 |
[Python][program] CLI ASCII art ๋ฐ๋ ํ์ธ ๋ฉ์ธ์ง ์ฐ๊ธฐ (0) | 2025.02.12 |
[Python][pandas] Loading Data - CSV (0) | 2025.02.11 |