본문 바로가기
Python/Pandas

Pandas : to_parquet 수행 시 유의사항

by 나무가 2020. 12. 26.

# Latest modification @ 20-12-26

# 아래의 내용에 잘못된 부분이 있다면, 댓글로 알려주시면 확인하고 수정하겠습니다 ( 미리 감사합니다 :) )

1. to_parquet을 사용하려면, pyarrow 또는 fastparquet이라는 라이브러리가 추가적으로 필요하다

-> 해당 라이브러리는 parquet 변환 시 엔진으로 사용하는 라이브러리 

-> 사용 시 특정 엔진을 고를 수 있다 ( 아래 코드 참고 )

 

Engine : Pyarrow  /  Compression : gzip ( compression은 2번 참고)

df = pd.DataFrame([1,2,3,4], columns=['idx'])
df.to_parquet("test.parquet", engine="pyarrow", compression="gzip")

 

Engin : fastparquet / Compression : snappy

df = pd.DataFrame([1,2,3,4], columns['idx'])
df.to_parquet('test.parquet', engine='fastparquet', compression='snappy')

 

2. compression 파라미터 값에 snappy 설치 시 조심해야 한다 ( # TODO )

-> 아직까지 해결방법을 찾지 못 했지만, snappy를 설치가 아니라 python-snappy를 설치해야 한다

pip3 install --user python-snappy

( 특수한 경우가 아니라면, 라이브러리에 악성코드가 숨어있을 수 있으니 --user 를 사용하는 것을 권장한다 -> 출처 : # TODO )

 

3. Mixed type은 parquet으로 변환할 수 없다

-> df.dtypes로 확인했을 때, 각 column들끼리 dtype가 다르면 parquet 변환 시 오류가 발생한다

( Reference : github.com/pandas-dev/pandas/issues/21228 ) <- 수정 계획 없다고 합니다 *^^* (19.9.6 기준)

 

4. 파일 이름에 대한 한국어 지원이 안 된다 ( 다른 부분(column 명, ...)은 확인 아직 못 했습니다 )

( pyarrow.lib.ArrowInvalid: Cannot parse URI: './가나다.parquet' )

# Error occurs 
df.to_parquet("가나다.parquet", engine="pyarrow", compression="gzip")

# No Error
df.to_parquet("abc.parquet", engine="pyarrow", compression="gzip")

 

5. (개인생각) engine은 pyarrow 사용을 추천합니다

-> fastparquet으로 진행했을 때, column 이름을 utf-8 encoding으로 specify해줘야 한다 ( 아래 코드 참고 )

# Error occurs
df = pd.DataFrame([1,2,3,4], columns['idx'])
df.to_parquet('test.parquet', engine='fastparquet', compression='gzip')

# No Error
df = pd.DataFrame([1,2,3,4], columns[u'idx'])
df.to_parquet('test.parquet', engine='fastparquet', compression='gzip')

 

 

'idx' vs u'idx' 차이로 에러가 나고 안 나고 합니다 ㅠ

 

6. (개인생각) compression은 gzip을 추천합니다.

-> 우선, 제 환경은 MacBook Pro 16 15-inch / Python 3.6.8 이며, snappy를 설치 후 제거하고 다시 python-snappy를 설치하였을 때 snappy를 찾지 못하는 경우가 있었습니다. 

( ModuleNotFoundError: No module named 'snappy._snappy_cffi' )

'Python > Pandas' 카테고리의 다른 글

Pandas 10분 가이드: 데이터 분석 맛보기  (0) 2024.12.10