강
[AWS Lambda] AWS Lambda로 MapReduce 작업을 돌려보기 - 1 본문
AWS Lambda로 MapReduce 작업을 구현되어있는 코드를 수정하여 구성해볼 것 입니다.
이번 포스트에서는 원문에서 코드가 python2.6의 버전만을 지원하므로 python3.6으로 돌릴 수 있도록 변경해 볼 것 입니다.
원문 내용의 주소와 깃헙 주소는 다음과 같습니다.
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함수의 차이는 다음의 주소를 참조해 주세요.
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]:
'AWS > Lambda' 카테고리의 다른 글
[AWS Lambda] 서버리스 환경에서 ML 추론 작업 수행해보기 (0) | 2022.08.18 |
---|---|
[AWS Lambda] python3.8 버전에서 web request (0) | 2021.11.06 |
[AWS Lambda] Lambda vs Azure Function 내부 구조 비교 (2) | 2021.09.30 |
[AWS Lambda] AWS Lambda로 MapReduce 작업을 돌려보기 - 2 (0) | 2020.11.22 |
[AWS Lambda] AWS EFS를 Lambda 저장소로 사용하기 (2) | 2020.11.05 |
Comments