[Python] 데이터 포맷 변환 - Protocol Buffer를 Json으로 변환
들어가며
데이터 포맷은 참... 다양합니다. json부터 시작해서 csv, protocol buffer, text 등등.. 이번에는 protocol buffer를 json의 형태로 변환하는 방법에 대해서 알아보려고 합니다. 왜 필요하느냐.. 저 같은 경우에는 spark에서 데이터를 처리하기 위해서 변환을 했습니다. 사실 스파크에서는 protocol buffer를 지원하기 때문에 그대로 읽으면 되지만, tweeter에서 제공하는 elephant-bird 라이브러리를 함께 사용해야 하는 복잡함이 있다. 그것보다 아직 protocol buffer를 읽어서 spark에서 처리한 내용이 거의 없었다. 내가 찾아봤을때는 elephant-bird와 scala를 이용해서 읽어보려고 했으나 많은 dependency 등과 그 외의 문제가 엄청 많았다. 많은 커뮤니티에서 다루고 있는 문제라면 쉽게 해결을 할 수 있겠지만, 그래서 일단 숙제로 남겨두고 급한대로 protocol buffer를 json으로 변환한 뒤에 스파크에서 처리하자라는 생각으로 작전을 변경했다. 일단 처리는 해야하니까 말이다. 다음에는 꼭 해결하리.
라이브러리 설치
protobuf를 dict의 형태로 변환을 해주는 라이브러리가 존재해서 사용을 하였다. [바로가기]
$ sudo pip install protobuf-to-dict
소스코드
소스코드는 총 3단계로 이루어져 있습니다.
- 첫번째는 내가 정의한 protocol buffer의 파일을 읽기
- 읽어드린 파일을 protobuf_to_dict을 이용해 dict의 형태로 변환을 하고, dict의 데이터를 json으로 변경
- json_string의 값을 파일에 저장
import json, os
import Proto import Tweet_pb2 as LogDataProto
import protobuf_to_dict import protobuf_to_dict
filename="tweet.log" # proto type
# read protobuf file
f = open(filename, "r")
try:
logfile = LogDataProto.LogDataFile()
logfile.ParseFromString(f.read())
except (IndexError, TypeError):
print 'index, type error'
# protobuf to json
logfile_dict = protobuf_to_dict(logfile)
json_string = json.dumps(logfile_dict, encoding='utf-8')
# write json file
new_filename = os.path.splitext(filename)[0] + '.json'
f = open(new_filename, 'w')
f.write(json_string.encode("utf-8"))
'Python > Python 프로그래밍' 카테고리의 다른 글
[Python] Pillow를 이용한 이미지 분석 with Jupyter(IPython Notebook) 확인하는 방법 (0) | 2021.04.28 |
---|---|
[Python] argparse를 이용한 입력 파라미터 받는 방법 (0) | 2021.04.28 |
[Python] Singleton Pattern을 이용한 Logger 만들기 (0) | 2021.04.27 |
[Python] 파이썬 CSV파일 입/출력 (FileI/O) (0) | 2021.04.27 |
[Python] Enum 사용하는 방법 및 예제코드 (0) | 2021.04.27 |
[Python] collections를 이용한 Dictionary 정렬하기 (0) | 2021.04.27 |
[Python] json 모듈 사용하기 :: String을 Dict으로 변환 (0) | 2021.04.27 |
[Python] timestamp를 datetime으로, datetime을 timestamp로 변환하는 방법 (0) | 2021.04.27 |