[t:/]$ 지식_

pyspark tip

2018/01/15

1. numpy.float64를 dataframe의 key로 만들기

에러난다. float()으로 형변환 하면 된다. 주로 문자열로만 키를 써서 아.. 숫자는 안 되는구나 착각할 수도 있다. 하지만 형변환 하면 된다.

2. dataframe의 차집합 구하기

filter는 join 연산이 아님을 유의한다. 우변은 상수가 들어간다. 그렇면 차집합을 우에 구한단 말인가. join에 <>를 쓰면 join이 된다. 원하는 결과가 아니다. subtract는 단일 컬럼만 남는다. 쓸 수 없다. 그럴땐 join에 left_anti를 걸면 된다.

 dataFrame1.join(dataFrame2, "key_col", "left_anti")

3. 대용량 처리시 속도

rdd를 쓰면 지지고 볶고 하는 걸 내 맘대로 하기 편하다. dataframe을 쓰면 agg 때문에 열이 받는다. rdd로 하는 것이 눈에 잘 보이긴 하나 리파티션이나 캐싱 위치에 따라 성능 차가 크다. 대용량 처리시 이걸 일일이 프로파일링 하기가 힘들다. 조인을 위해서 키 전환 피봇팅을 하자니 일일이 귀찮고 느리다. 간단한 데이터를 메모리로 올리고 브로드캐스트하여 참조하기도 해봤으나 결론은 dataframe으로 쓰면 알아서 빨라진다는 것이다. 조금은 부담되는 조인도 어지간하면 빠르다. flatMap을 쳐야 할 일이 있어서 쓰리쿠션 태울 때 조차도 빠르다.









[t:/] is not "technology - root". dawnsea, rss