반응형
kosis openAPI를 AWS Lambda를 이용해 호출해보는것까지 해보았다.
Lambda가 아닌 AWS Glue를 이용해 데이터를 S3에 저장하는 기능을 구현해본다.
Glue 서비스로 이동한다.
Jobs에 Python script editor를 선택하고 [Create]를 클릭한다.
[Script] 탭에, 작성한 python code를 붙여넣고,
[Job Detail] 탭으로 이동하여, Job 이름을 설정하고,
그리고 IAM Role을 설정해준다.
IAM이 없으면 아래와같이 생성해준다.
import json
import io
import boto3
import pandas as pd
from urllib.request import urlopen
from datetime import datetime
ACCESS_KEY = 'access_key'
SECRET_KEY = 'secret_key'
def getApiUploadS3(apiUrl, s3Url, s3Path, tempFileName):
with urlopen(apiUrl) as url:
json_file = url.read()
py_json = json.loads(json_file.decode('utf-8'))
data = []
for i, v in enumerate(py_json):
if i == 0 :
print(f"Title : {v['TBL_NM']}")
value = []
value.append(v['PRD_DE'])
value.append(v['C1_NM'])
value.append(v['ITM_NM'])
value.append(v['DT'])
value.append(v['UNIT_NM'])
data.append(value)
df = pd.DataFrame(data)
df.columns = ['yyyyymm', 'category', 'item', 'value', 'unit']
df.to_parquet(s3Url + s3Path + tempFileName
, engine='pyarrow'
, index=False
)
return s3Path + tempFileName
if __name__ == "__main__":
apiUrl = "https://kosis.kr/openapi/statisticsData.do?method=getList&apiKey=apiKey&format=json&jsonVD=Y&userStatsId=whiseung/115/DT_11523_400/2/1/20221123094346&prdSe=M&newEstPrdCnt=10"
bucketName = 'bucket_name'
s3Path = 'parquet_files/'
thisTime = datetime.today().strftime('%Y%m%d%H%M%S')
tempFileName = f'KOSIS_DT_11523_400_{thisTime}.parquet'
resultFileName = getApiUploadS3(apiUrl, f's3://{bucketName}/', s3Path, tempFileName)
print(f'### Parquet file created! {resultFileName}')
실행하게되면, 아래와 같은 에러메세지가 발생한다.
ImportError: pyarrow is required for parquet support
Glue 3.0 은 python 3.9 버전이고,
Glue 1.0 은 python 3.6 버전이므로
3.6버전의 라이브러리를 다운 받아야 한다.
pyarrow 라이브러리를 whl 파일로 s3에 업로드하고,
[Job details] 의 Python library path 에 s3에 올린 파일들 경로를 적어준다.
s3://bucket_name/pyarrow-6.0.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
다시 실행해본다. 또 에러가 발생한다.
ImportError: The s3fs library is required to handle s3 files
s3fs 또한 다운받아서 s3에 올려주고,
Python library path 에 추가해준다.
s3://bucket_name/pyarrow-6.0.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl, s3://bucket_name/s3fs-0.4.2-py3-none-any.whl
정상적으로 실행되는것을 확인할 수 있다.
반응형
'AWS' 카테고리의 다른 글
AWS Glue에서 Spark를 이용해 MSSQL 데이터를 S3에 저장하기 (0) | 2022.12.26 |
---|---|
AWS Glue에서 pymssql 을 이용해 MSSQL 데이터를 S3에 저장하기 (0) | 2022.12.26 |
AWS Glue 를 사용하기 위한 IAM 생성 (0) | 2022.12.13 |
API batch 실행을 위해 EventBridge 로 Schedule 생성하여 AWS Lambda 호출 (0) | 2022.12.12 |
KOSIS openAPI 호출을 위한 AWS Lambda 생성 (0) | 2022.12.09 |