Data/Data Analysis
[Pyspark] sorted와 sort 의 차이
재융
2019. 11. 14. 18:22
반응형
pyspark에서 예를들어서 collect_list함수를 사용할때 단점이 있는데
- 순서가 상관없이 list가 생성이된다
따라서 collect_list사용후 sorting을 해줘야 나중에 groupBy등 함수를 사용할때 똑바르게 합쳐지는데
이때 sorting을 udf함수로 직접 만들어줘서 사용해야한다.
import pyspark.sql.functions as F
def sorting_list_pyspark_ver1(temp):
return temp.sort()
def sorting_list_pyspark_ver2(temp):
return sorted(temp)
이렇게 두가지 방법으로 선언할수가있는데
언뜻보기에는 별다른 문제가 없어보이지만 직접 실행해보면
ver1에는 원하는 값이 안나오고 null값이 찍히고
ver2에는 원하는 정렬된 list값이 넣어져있다.
이러한 이유는
- sorted(temp) 는 temp라는 list를 정렬뒤에 새로운 list를 반환해주는 반면에
- temp.sort()는 temp자체를 값을 바꾼다.
따라서 temp.sort()를 사용하기 위해서는 다음과 같이 수정을 해줘야한다
def sorting_team_id(temp):
temp.sort()
return temp
change = F.udf(lambda z: sorting_team_id(z))
반응형