본문 바로가기

Spark4

[Spark] json->parquet 저장시 특수문자 해결 목적 parquet의 경우, attribute name에 " ,;{}()\n\t=" 문자가 들어가면 rename을 시켜주어야한다. 에러메시지는 아래와 같다. 'Attribute name "my column" contains invalid character(s) among " ,;{}()\\n\\t=". Please use alias to rename it.;' ... pyspark.sql.utils.AnalysisException: 'Attribute name "some-ar ray" contains invalid character(s) among " ,;{}()\\n\\t=". Please use alias to rename it.;'​ json을 parquet로 저장 시 key값에 해당 문자들이 들어.. 2021. 10. 7.
[Spark] json -> parquet로 저장시 스키마 충돌 문제 해결 목적 json으로 저장된 파일을 partition을 추가하여 parquet로 저장하려한다. 이때, json 내에 빈 array가 있을 경우 inferSchema로 인해 array(string)의 스키마로 표현된다. 이 경우 다른 파일에서 array내에 struct 등의 다른 값이 들어올 경우 에러가 발생한다. pre-defined된 schema가 있다면 좋겠으나 필자의 경우는 그렇지 못하였다. 필자에게 발생한 에러메시지는 아래와 같다. java.lang.ClassCastException: optional binary element (UTF8) is not a group at org.apache.parquet.schema.Type.asGroupType(Type.java:207) at org.apache.s.. 2021. 10. 6.
[Spark] JSON string 파싱하기 목적 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).. 2021. 8. 26.
[Spark] yarn cluster 모드 시 한글 깨짐 현상(UnicodeEncodeError) 상황 spark-submit시(master=yarn, deploy-mode=cluster) parameter를 한글로 주는 경우 한글이 깨지는 현상이 발생한다. -Dfile.encoding=utf-8의 옵션을 driver, executor에 적용 시 UnicodeEncodeError가 발생한다. 해결 과정 spark 내에서 환경변수를 확인 시 'LANG': 'ko_KR.eucKR'와 같은 결과를 확인하였다. utf-8 인코딩이 적용되지 않아 한글이 깨진 것으로 보였다. yarn을 이용할 경우 spark.yarn.appMasterEnv.[EnvironmentVariableName] 옵션을 이용하여 환경변수를 설정 할 수 있다. appMasterEnv 옵션을 이용하여 환경변수 L.. 2020. 6. 4.
반응형