2021. 11. 19. 16:06

[에러로그]parquet파일 변환 fastparquet v.s pyarrow

에러 내용

  • 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?

 

A comparison between fastparquet and pyarrow?

After some searching I failed to find a thorough comparison of fastparquet and pyarrow. I found this blog post (a basic comparison of speeds). and a github discussion that claims that files crea...

stackoverflow.com

문제원인

  • 문제가 생겼던 특정 컬럼의 형식은 array였다.
  • fastparquet 공식 문서에 따르면 간단한 데이터들과 plain encoding만을 지원한다고 한다. 이는 복잡한 데이터들에는 array도 포함되어있다는 뜻이었다.

How to write a Dask dataframe containing a column of arrays to a parquet file

 

How to write a Dask dataframe containing a column of arrays to a parquet file

I have a Dask dataframe, one column of which contains a numpy array of floats: import dask.dataframe as dd import pandas as pd import numpy as np df = dd.from_pandas( pd.DataFrame( { ...

stackoverflow.com

결론

따라서 형이 다양한 데이터들과 인코딩 된 데이터셋을 사용한다고 한다면 pyarrow 엔진으로 parquet 파일을 생성하자