본문 바로가기

Big Data/Spark

[Spark] SQL - 두 컬럼을 병합하여 새로운 Dataframe 만들기

이전 글에서 list 형태로 저장되어있는 데이터를 각각의 row들로 분리하여 두 컬럼을 추출하는 것까지 진행하였다.

 

다음 순서로 두 컬럼을 이어붙여 아래와 같은 Dataframe을 생성하려고 했으나 pandas의 concat 역할을 수행하는 pyspark의 함수를 찾을 수 없었다.

 

원하는 형태

 

단순히 join으로는 두 컬럼을 가로로 붙일 수 없다.

 

 

대안

  1. 두 데이터 프레임에 monotonically_increasing_id() 를 이용하여 id를 부여한다.
  2. id를 기준으로 left join 한다.
  3. id를 삭제한다.
df1 = df1 .withColumn("id", monotonically_increasing_id())
df2 = df2 .withColumn("id", monotonically_increasing_id())

df3 = df1.join(df2, "id", "left").drop("id")
> df1.show()

+-----------+---+
|      Brand| id|
+-----------+---+
|         LO|  0|
|         LO|  1|
|         LO|  2|
|Non-branded|  3|
|Non-branded|  4|
|Non-branded|  5|
|    Samsung|  6|
+-----------+---+

> df2.show()

+--------------------+---+
|             Product| id|
+--------------------+---+
|         AirPods Pro|  0|
|           AirPods 2|  1|
|         AirPods Pro|  2|
|    Earbuds category|  3|
|    Earbuds category|  4|
|    Earbuds category|  5|
|         Galaxy Buds|  6|
+--------------------+---+

> df3.show()

+-----------+--------------------+
|      Brand|             Product|
+-----------+--------------------+
|         LO|         AirPods Pro|
|         LO|           AirPods 2|
|         LO|         AirPods Pro|
|Non-branded|    Earbuds category|
|Non-branded|    Earbuds category|
|Non-branded|    Earbuds category|
|    Samsung|         Galaxy Buds|
+-----------+--------------------+

 

 

 

 

Ref.

https://forums.databricks.com/questions/8180/how-to-merge-two-data-frames-column-wise-in-apache.html