이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

butter_shower

[pyspark/빅데이터기초] Parquet(파케이) 파일 형식이란?

  • 2021.11.17 12:50
  • 머신러닝 꿈나무/기본 개념
글 작성자: _rian

파케이(parquet)이란 하둡에서 칼럼방식으로 저장하는 저장 포맷을 말합니다. 파케이는 프로그래밍 언어, 데이터 모델 혹은 데이터 처리 엔진과 독립적으로 엔진과 하둡 생태계에 속한 프로젝트에서 칼럼 방식으로 데이터를 효율적으로 저장하여 처리 성능을 비약적으로 향상시킬 수 있습니다.

열(Column)기반 압축을 하고있는데 이는 칼럼의 데이터가 연속된 구조로 저장되어 있다. Row 중심으로 저장되어있는 것과는 아래 사진을 보면 이해가 빠를 것 같습니다.

열을 기반으로 데이터를 처리하면 행 기반으로 압축했을때에 비해 데이터의 압축률이 더 높고, 필요한 열의 데이터만 읽어서 처리하는 것이 가능하기 때문에 데이터 처리에 들어가는 지원을 절약할 수 있습니다.

파케이는 하둡 에코시스템 안에서 언제든지 사용 가능한 데이터 저장 포맷으로, 스파크 SQL은 자동으로 기존의 데이터 스키마를 유지하는 parquet 파일의 읽기와 쓰기를 지원합니다. 유사한 파일 형식으로 ORC가 있는데요, ORC도 파케이와 마찬가지로 압축률이 높고 스키마를 가지고있으며 처리속도가 빠르지만 하이브에서만 사용할 수 있었습니다. (현재는 아님) 회사가 다르다보니 통합된 형태로 발전되지 못하고 있다가 트위터에서 Parquet을 발표하였습니다. ORC는 Hive에 최적화된 형식이고, Parquet은 스파크에 최적화된 형식이라고 보시면 좋을 것 같습니다. 

Parquet 파일을 쓸 때 모든 칼럼은 호환성을 위해 자동으로 null을 허용하도록 변경됩니다.

장점

  • 높은 압축률. 칼럼 단위로 구성하면 데이터가 더 균일하므로 압축률이 높아진다.
  • 데이터를 전체 칼럼중에서 일부 칼럼을 선택해서 가져오는 형식이므로 선택되지 않은 칼럼의 데이터에서는 I/O가 발생하지 않게된다.
  • 칼럼에 동일한 데이터 타입이 저장되기 때문에 칼럼별로 적합한(데이터형에 유리한) 인코딩을 사용할 수 있다.

 

위는 파일 형식에 따른 IO시 메모리 사용량과 파일의 크기를 비교한 파이콘 발표 자료인데요, 비록 판다스를 기준으로 측정된 지표이긴 하나 파일을 저장할 때 CSV보다는 parquet, hdf5 등의 형식을 사용하면 시간과 메모리를 절약할 수 있습니다. 

 

Parquet 데이터 쓰기 & 불러오기

PARQUET_FILEPATH = "sample.parquet"

# 데이터프레임의 스키마 정보를 유지하면서 parquet 파일로 저장
df.write.format('parquet').save(PARQUET_FILEPATH)
df.write.parquet(PARQUET_FILEPATH)

# parquet 데이터 불러오기
df = spark.read.parquet(PARQUET_FILEPATH)
df = spark.read.format('parquet').load(PARQUET_FILEPATH)

parquet 파일에는 스키마 정보가 포함되어 있습니다. 따라서 위에서 읽어온 스키마는 그대로 보존됩니다. 파케이 파일로 불러온 결과 역시 DataFrame이 됩니다.

'머신러닝 꿈나무 > 기본 개념' 카테고리의 다른 글

토큰화(tokenize)란?  (0) 2022.02.17
[빅데이터기초] 스파크란?  (0) 2021.11.13
켄달타우란? - 비모수적 상관계수에 대해서  (0) 2021.05.24
주성분 분석(PCA)이란?  (0) 2021.03.03
맥북에서 딥러닝 개발환경 구축하기 - 아나콘다, oh-my-zsh, iterm2, jupyter lab 테마 설정하기  (0) 2021.01.13

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 토큰화(tokenize)란?

    토큰화(tokenize)란?

    2022.02.17
  • [빅데이터기초] 스파크란?

    [빅데이터기초] 스파크란?

    2021.11.13
  • 켄달타우란? - 비모수적 상관계수에 대해서

    켄달타우란? - 비모수적 상관계수에 대해서

    2021.05.24
  • 주성분 분석(PCA)이란?

    주성분 분석(PCA)이란?

    2021.03.03
다른 글 더 둘러보기

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

최근 글

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바