# 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 |
---|