딥상어동의 딥한 프로그래밍/Spark

[scalaSpark] pivot과 unpivot

딥상어동의 딥한생각 2021. 2. 6. 10:02

초록

1. pivot
2. unpivot

pivot

val pv_dataframe =
      df_dataframe
        .groupBy("col0")
        .pivot("col1")
        .agg(countDistinct("col2").as("colname"))

 

groupBy와 pivot에 컬럼을 여러개 넣을 수 있다. agg에도 마찬가지

 

unpivot

val unpv_dataframe =
      df_dataframe
        .selectExpr("group", "stack(2, 'col1', col1, 'col2', col2)")

 

여기서 중요한 것은 stack에 "1. 들어갈 열의 숫자를 정한다"와 col1과 col2 stack시길 열을 'col1', col1 이렇게 각각 두번씩 적어줘야 한다는 것이다.

 

이외에 where로 조건을 붙이거나, withColumnRenamed를 통해 열 이름을 바꿀 수도 있다. 

 

위 코드를 실행할 경우 열은 3개가 되는데 

 

group
col0 : stack의 열 이름을 변수로 가짐 col1,과 col2
col1 : cell안의 원소 값

 

위와 같이 된다.