Data&Processing
Convert Pandas with MapType Value to Pyarrow
별이별이
2022. 1. 11. 20:56
- Pandas MapType column을 pyarrow로 변환했을때 default 로 struct type으로 변환이되며
- Hive 테이블을 동일하게 Map Type으로 설정하면 Hive에서 해당컬럼데이터를 못 읽음.
- 꼭 Map Type으로 변환하고 싶다면 다음과 같이
- schema을 설정해서 파라메터로 추가하고
- MapType 컬럼은 Tuple로 변환함
d = {'conditions': [{"b":"1","aa":"22"},{"1":"22"}]}
df1 = pd.DataFrame(data=d)
pyarrow.Table.from_pandas(df1, preserve_index=False)
pyarrow.Table
conditions: struct<1: string, aa: string, b: string>
child 0, 1: string
child 1, aa: string
child 2, b: string
# struct로 변환이 되면 Hive Table이 Map Type일 경우 컬럼데이터 못읽음
pa.Table.from_pandas(df1, schema=schema1, preserve_index=False)
# python MapType을 pyarrow schema 에 MapType으로 변경이 안됨
# pandas map을 tuple로 변경 후 pyarrow로 변환해야함
d = {'conditions': [[("b","1"),("aa","22")],[("1","22")]]}
df1 = pd.DataFrame(data=d)
schema1 = pa.schema([
('conditions', pa.map_(pa.string(), pa.string()))
])
pa.Table.from_pandas(df1, schema=schema1, preserve_index=False)
# works!!!