이것저것 프로그래밍 정리(Macbook)

apache-spark에서 map,lambda 함수 활용하기(1) - pyspark 본문

apache-spark(big data)

apache-spark에서 map,lambda 함수 활용하기(1) - pyspark

parkaparka 2020. 4. 22. 17:11
반응형

map() 함수를 이해하기 위해 map() 함수를 사용하지 않고 섭씨를 화씨로 변환하는 c2f() 파이썬 함수를 만들어 보자.

 


Python 함수 c2f()

위 함수를 간단히 설명하면 데이터를 하나씩 읽어서 for문으로 처리하고 list로 변환하여 반환해 주었다.

map() 함수를 이용하면 for문을 없앨 수 있다. 한번 map() 함수를 사용해보도록 하자.


map 함수 사용 c2f()

python은 map(), reduce(), filter() 함수를 이미 갖고 있다. 간단히 세 함수에 대해 알아보도록 하자.

함수 설명
map() 각 데이터 요소에 함수를 적용해서 'map'타입으로 반환 map(fn,data)
filter() 각 데이터 요소에서 함수의 결과 true를 선택해서 반환 filter(fn,data)
reduce() 각 데이터 요소에 함수를 적용해서 list를 반환 reduce(fn,data)

여기서 map()을 사용해 보도록 하자. map() 함수를 사용시 c2f()의 for문이 사라진다는 점을 유의하도록 하자. 

map() 함수는 두개의 인자가 있다.

첫번째 인자는 처리하려는 함수이다. 이 경우 c2f가 되겠다. map() 함수를 사용하기 위해서 처리함수가 return값이 반드시 있어야 한다.

두번째 인자는 처리하려는 데이터 이다. 이 경우 변환하고자 하는 섭씨 온도의 리스트인 celsius가 되겠다.


lambda 함수 이용

lambda 함수를 이용하면 코드의 줄 수가 많이 줄게 된다. lambda 함수는 무명 함수이므로 함수 선언이 필요 없고, 처리 결과는 'return'을 하지 않아도 반환 된다.

lambda는 함수를 정의하는 명령어로서, 이름이 없다는 특징이 있고, 매우 직관적으로 사용할 수 있다. map-reduce에서 자주 사용되므로 잘 이해할 필요가 있다. 

lambda의 간단한 예시를 살펴 보도록 하자.

lambda 함수 이용하기 전에 간단한 곱하기 2 해주는 함수 f(x)를 만들어 보았다.

위 함수를 lambda 함수로 바꿔보자.

y = lambda x:x*2 를 살펴 보도록 하자 .

입력변수로 x를 받고 출력값으로 x*2을 y에 반환해주는 형식이다.

따라서 y(1)이면 입력변수로 1이 들어가고 출력값으로 1*2 = 2 가 반환 되어 y(1) = 2 가 되는 것이다.


map 함수 + lambda 함수

map 함수와 lambda 함수를 spark에 적용 시키기 전에 c2f에 간단히 적용시켜 보도록 하자.

map(lambda c:float((9/5)*c)+32, celsisus) 를 살펴 보도록 하자.

먼저 map 부터 보면 처리하려는 데이터는 celsius이고 처리 함수는 lambda 함수이다. 

lambda c:float((9/5)*c)+32 를 살펴보자. 입력 변수는 c이고 반환 값은 float((9/5)*c)+32 이다.

종합적으로 정리를 해보면 celsius의 각각 값들이 lambda 함수의 c 값으로 들어가서 화씨로 변화되어 temp에 저장되는 것이다.

 

spark에서 사용 할수 있게 map, lambda를 문자열에 적용시켜보자.

위의 것을 풀어서 설명해 보면 처리하려는 데이터는 sentence이고 sentence를 .split() 을 이용해서 각각 한글자씩 나누어 준 후에 map 형태를 list로 변환해 준 것이다.

 

이번 글에서는 RDD에서 map과 lambda를 사용하기 위해 map과 lambda를 알아보았다.

다음 글에서는 RDD에 map함수와 lambda를 적용시켜 보도록 하자.

반응형
Comments