목적
- spark에서 json data source를 이용할 경우 json이 newline으로 구분되어있어야 json이 제대로 인식된다.
- 필자가 이용하는 데이터의 경우 아래와 같이 newline이 제대로 입력되어있지 않았다.
{"a":"b"}{"a":"c"}{"a":"d"}{"b":"e"}...
- 이럴 때에 써먹을만한 간단한 파이썬 함수를 기록한다.
내용
import re
import json
def json_splitter(input_json):
r = re.split('(\{.*?\})(?= *\{)', input_json)
accumulator = ''
res = []
for subs in r:
accumulator += subs
try:
json_dict = json.loads(accumulator)
json_str = json.dumps(json_dict)
res.append(json_str)
accumulator = ''
except:
pass
return res
- 우선 정규식으로 {혹은 }로 감싸져있는 부분들을 나눈다.
- 만약 해당 값이 json.loads로 읽히면, 즉 json이라면 이를 res에 저장한다.
- 그렇지 않다면 다음 토큰까지 accumulator에 저장해서 json인지 아닌지 확인한다.
테스트 결과
- 간단한 테스트의 경우는 아래와 같이 결과가 잘 나왔다. 이를 udf를 이용해 활용할 수 있다.
test_json="""
{"a":["1","2","3"], "b":"hey"}{"this":"is","my":123}{"test":"json"}
"""
json_splitter(test_json)
>> [{'a': ['1', '2', '3'], 'b': 'hey'}, {'this': 'is', 'my': 123}, {'test': 'json'}]
참고
반응형
'Spark' 카테고리의 다른 글
[Spark] json->parquet 저장시 특수문자 해결 (0) | 2021.10.07 |
---|---|
[Spark] json -> parquet로 저장시 스키마 충돌 문제 해결 (0) | 2021.10.06 |
[Spark] yarn cluster 모드 시 한글 깨짐 현상(UnicodeEncodeError) (0) | 2020.06.04 |
댓글