본문 바로가기

Big Data/Spark

[Spark] SQL - explode()를 사용하여 list 형태의 Row 분리하기

 

원본 데이터셋은 위와 같이 되어있으며 여기서 Brand와 Product 칼럼을 추출하고자 하였다.

하지만 select 결과 아래와 같이 Row들이 list형태로 들어가있었다.

 

> df.select(df.Brand, df.Product)

+--------------------+--------------------+
|               Brand|             Product|
+--------------------+--------------------+
|[LO, LO, LO, Non-...|[AirPods Pro, Air...|
+--------------------+--------------------+

 

 

pyspark.sql.functions.explode

 

explode함수는 주어진 배열 또는 맵의 각 요소에 대해 새 행을 반환한다.

 

 

 

> df.select(explode(df.Brand))

+-----------+
|        col|
+-----------+
|         LO|
|         LO|
|         LO|
|Non-branded|
|Non-branded|
|Non-branded|
|    Samsung|
+-----------+

 

이때, 컬럼명을 지정해주지 않으면 defualt는 col 로 지정하기 때문에 alias 를 이용하여 컬럼명을 바꿔준다.

 

> df.select(explode(df.Brand).alias("Brand"))
+-----------+
|      Brand|
+-----------+
|         LO|
|         LO|
|         LO|
|Non-branded|
|Non-branded|
|Non-branded|
|    Samsung|
+-----------+

 

 

 

Ref.

https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.functions.explode.html#pyspark-sql-functions-explode

https://stackoverflow.com/questions/36876959/sparksql-can-i-explode-two-different-variables-in-the-same-query/37350297