[AWS Lambda] AWS Lambda로 MapReduce 작업을 돌려보기 - 1 본문

AWS/Lambda

[AWS Lambda] AWS Lambda로 MapReduce 작업을 돌려보기 - 1

최재강 2020. 11. 22. 02:28

AWS Lambda로 MapReduce 작업을 구현되어있는 코드를 수정하여 구성해볼 것 입니다.

이번 포스트에서는 원문에서 코드가 python2.6의 버전만을 지원하므로 python3.6으로 돌릴 수 있도록 변경해 볼 것 입니다.


원문 내용의 주소와 깃헙 주소는 다음과 같습니다.

https://aws.amazon.com/blogs/compute/ad-hoc-big-data-processing-made-simple-with-serverless-mapreduce/

https://github.com/awslabs/lambda-refarch-mapreduce


다음의 블로그를 참조하여 이해해 큰 도움을 얻었습니다.

https://jeongchul.tistory.com/622?category=495790

python3.6으로 구동이 되는 제가 작업한 코드는 다음의 깃헙에 있습니다.

https://github.com/kmu-bigdata/KMU-MARLA

python2.7버전을 python3.6으로 바꾸기

먼저 python2와 python3 버전의 가장 큰 차이는 "print"문 일 것입니다. 따라서 모든 "print"문에 괄호를 붙여줍니다.

  • print "" → print()
print "hello" -> print("hello")

python2.7의 StringIO는 python3.6에서 io라는 모듈안에 속하게 되었습니다. 따라서 다음과 같이 변경합니다.

  • StringIO → io.StringIO
import StringIO -> from io import StringIO

python3로 넘어오면서 dictionary의 item들을 가져오는 iteritems함수가 없어졌으므로 다음과 같이 수정합니다.

  • 'dict' object has no attribute 'iteritems' error, iteritems → items
# reducer.py line 64

for srcIp, val in json.loads(contents).iteritems():
-> for srcIp, val in json.loads(contents).items():

python2의 iteritems 함수와 python3의 items함수의 차이는 다음의 주소를 참조해 주세요.

https://qastack.kr/programming/10458437/what-is-the-difference-between-dict-items-and-dict-iteritems-in-python2

python2에서 되었던 코드가 python3에서 다음과 같은 에러가 발생한다면 문자열 decode를 신경 써주었는지 확인해야 합니다.

  • a bytes-like object is required, not 'str' error
  • :python2 와 python3 에서 str 처리 방식이 달라 생김.
for line in contents.split('\n')[:-1]:
-> for line in contents.decode().split('\n')[:-1]:
Comments