반응형
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))
반응형
'Data > Data Analysis' 카테고리의 다른 글
[Pandas] Datacamp - Clean a variable (0) | 2019.11.25 |
---|---|
[Pyspark] UDF함수에서 return 을 list형식으로 하고싶을 때 (0) | 2019.11.15 |
[Pyspark] pyspark 로컬에 설치 (1) | 2019.10.19 |
[Pyspark] dataframe join 문 (0) | 2019.09.16 |
[Pyspark] pyspark 함수 정리(3) (0) | 2019.01.15 |