목적
- 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'}]
참고
반응형
'기타' 카테고리의 다른 글
[Postgresql] 테이블 DDL 확인하기 (0) | 2021.09.14 |
---|---|
[Postgresql] Postgresql13 rpm으로 설치 (0) | 2021.08.27 |
[Gradle]Could not create service of type ChecksumService using BuildSessionScopeServices.createChecksumService(). (0) | 2021.08.25 |
[Postgresql] 설치 (0) | 2021.08.24 |
[AWS] Python으로 S3 Object(디렉터리 혹은 파일) 아래 파일 확인 (0) | 2021.08.03 |