https://stackoverflow.com/questions/57811415/reading-a-nested-json-file-in-pyspark <- 참고 자료
pyspark json을 read 하다가, 구조가 너무 복잡하게 read 되어서 분리하는데 애를 좀 먹었다. array는 쉬운데 struct 구조가 넘 어려웠다..... 일단 array 구조 분해부터 explode로 해보자.
from pyspark.sql import SparkSession
# 스파크 세션 생성
spark = SparkSession.builder \
.appName("Transform DataFrame") \
.getOrCreate()
from pyspark.sql import functions as F
data = [(['A', 'B'], "2020-11-01",),
(['B', 'I', 'R'], "2020-11-01",),
(['S', 'H'], "2020-11-02",),
(['A', 'H', 'S'], "2020-11-02",), ]
df = spark.createDataFrame(data, ("list", "dates",))
json을 다루다보면 array 구조의 데이터 프레임을 자주 만날 수 있다. df의 all_skills 컬럼이 array로 되어있는 것을 확인할 수 있다. 근데... 너무 불편하지 않은가!? explode로 펼쳐주자
*explode 함수
explode 함수는 주어진 배열 또는 맵의 각 요소에 대해 새 행을 반환하는 것임. df를 explode 하면 저렇게 펼쳐진다.
df.select(explode('all_skills'),'dates').show()
단, explode를 사용하면 컬럼명이 col로 초기화되므로 alias를 사용해서 컬럼명을 지정해주는게 좋다.
df.select(explode('all_skills').alias("all_skills"),'dates').show()
단, 한번에 두 컬럼을 explode하는건 불가능하다.하려하면, 아래와 같은 오류가 뜬다. 주의하기 !
AnalysisException: Only one generator allowed per select clause but found 2: explode(all_skills), explode(dates)
하고싶다면, 한 컬럼에 대해 explode 한 DataFrame을 새 변수에 저장하고, 그 변수에서 다시 explode 해주면 된다.
'스파크 Spark' 카테고리의 다른 글
[Spark] PySpark에서 struct 구조 분해하기 (0) | 2024.05.10 |
---|---|
[Spark] Pyspark 데이터 전처리 단골 코드 (Pyspark Method ver.) (0) | 2024.04.26 |
[Spark] 원격 주피터 허브에서 로컬 Spark 세션 및 hdfs 불러오기 (0) | 2024.04.17 |
[Spark] 우분투(Ubuntu)에서 하둡(Hadoop)위에 Spark(스파크)를 올리고, jupyter notebook으로 열기 (2) | 2024.03.29 |
[Spark] Pyspark spark sql 사용하기 (0) | 2024.02.20 |
댓글