딥상어동의 딥한 프로그래밍/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안의 원소 값
위와 같이 된다.