본문 바로가기

Data/Data Analysis

[Pyspark] sorted와 sort 의 차이

반응형

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))
반응형