-
[에러로그]parquet파일 변환 fastparquet v.s pyarrowProgramming/python 2021. 11. 19. 16:06
에러 내용
- parquet로 변환한 파일을 read해서 확인했을 때 일부 컬럼의 로우 값이 제대로 인코딩되지 않은 문제가 있다.
- 다른 컬럼의 값들은 정상적으로 표출되었지만 특정 컬럼에서만 이상이 생기는 것을 확인했다.
to_parquet 메소드
pandas 라이브러리에서 to_parquet 메소드를 사용해서 데이터프레임을 parquet 포맷으로 변경할 때, 사용할 수 있는 엔진의 옵션은 두 가지가 있다.
pyarrow와 fastparquet이 바로 그것인데, pandas 내부적으로 이 두 라이브러리들을 가져와서 parquet파일로 변환하게 된다.
라이브러리를 선택하는 방법은 engine 파라미터에 해당하는 라이브러리명을 적어주면 된다.
df.to_parquet("test.parquet", engine="pyarrow") # or df.to_parquet("test.parquet", engine="fastparquet")
압축 속도는 벤치마크상으로 pyarrow가 압도적으로 높지만 기본적인 라이브러리 자체의 용량이 100배나 차이나기 때문에 트레이드오프를 잘 따져서 두 엔진 중에 상황에 맞게 선택하면 될 것 같다.
A comparison between fastparquet and pyarrow?
문제원인
- 문제가 생겼던 특정 컬럼의 형식은 array였다.
- fastparquet 공식 문서에 따르면 간단한 데이터들과 plain encoding만을 지원한다고 한다. 이는 복잡한 데이터들에는 array도 포함되어있다는 뜻이었다.
How to write a Dask dataframe containing a column of arrays to a parquet file
결론
따라서 형이 다양한 데이터들과 인코딩 된 데이터셋을 사용한다고 한다면 pyarrow 엔진으로 parquet 파일을 생성하자
'Programming > python' 카테고리의 다른 글
airflow의 새로운 경쟁자 오케스트레이션 플랫폼 dagster (0) 2021.12.23 파이썬 데코레이터에서 wraps를 사용해야 하는 이유 (0) 2021.06.27 [python]str을 dict로 바꾸는 두 가지 방법 (2) 2021.01.24 파이썬 제너레이터(Generator) (0) 2020.06.06 (python)'is None'과 '==None'의 차이점 (0) 2020.02.27