단계 2. 변환 로직 구현 - AWS Glue

단계 2. 변환 로직 구현

참고

사용자 지정 시각적 변환은 Python 스크립트만 지원합니다. Scala는 지원되지 않습니다.

.json 구성 파일에 정의된 함수를 구현하는 코드를 추가하려면 Python 파일을 .json 파일과 동일한 위치에 이름은 동일하지만 “.py” 확장자로 저장하는 것이 좋습니다. AWS Glue Studio에서는 .json 파일과 .py 파일을 자동으로 연결하므로 구성 파일에 Python 파일의 경로를 지정할 필요가 없습니다.

Python 파일에서 명명된 파라미터를 구성하여 선언된 함수를 추가하고 DynamicFrame에서 사용하기 위해 함수를 등록합니다. 다음은 Python 파일의 예제입니다.

from awsglue import DynamicFrame # self refers to the DynamicFrame to transform, # the parameter names must match the ones defined in the config # if it's optional, need to provide a default value def myTransform(self, email, phone, age=None, gender="", country="", promotion=False): resulting_dynf = # do some transformation on self return resulting_dynf DynamicFrame.myTransform = myTransform

Python 코드를 가장 빠르게 개발하고 테스트하려면 AWS Glue 노트북을 사용하는 것이 좋습니다. AWS Glue Studio에서 노트북 시작하기를 참조하세요.

변환 로직을 구현하는 방법을 설명하기 위해 아래 예제의 사용자 지정 시각적 변환은 들어오는 데이터를 필터링하여 특정 미국 주와 관련된 데이터만 유지하는 변환입니다. .json 파일에는 functionName에 대한 파라미터(custom_filter_state)와 두 개의 인수(유형이 “str”인 “state” 및 “colName”)가 포함되어 있습니다.

예제 구성 .json 파일은 다음과 같습니다.

{ "name": "custom_filter_state", "displayName": "Filter State", "description": "A simple example to filter the data to keep only the state indicated.", "functionName": "custom_filter_state", "parameters": [ { "name": "colName", "displayName": "Column name", "type": "str", "description": "Name of the column in the data that holds the state postal code" }, { "name": "state", "displayName": "State postal code", "type": "str", "description": "The postal code of the state whole rows to keep" } ] }
Python에서 컴패니언 스크립트를 구현하려면
  1. AWS Glue 노트북을 시작하고 시작할 세션에 제공된 초기 셀을 실행합니다. 초기 셀을 실행하면 필요한 기본 구성 요소가 생성됩니다.

  2. 예제에 설명된 대로 필터링을 수행하는 함수를 생성하고 DynamicFrame에 등록합니다. 아래 코드를 복사하여 AWS Glue 노트북의 셀에 붙여 넣습니다.

    from awsglue import DynamicFrame def custom_filter_state(self, colName, state): return self.filter(lambda row: row[colName] == state) DynamicFrame.custom_filter_state = custom_filter_state
  3. 샘플 데이터를 생성하거나 로드하여 동일한 셀 또는 새 셀에서 코드를 테스트합니다. 새 셀에 샘플 데이터를 추가하는 경우 셀을 실행하는 것을 잊지 마세요. 예:

    # A few of rows of sample data to test data_sample = [ {"state": "CA", "count": 4}, {"state": "NY", "count": 2}, {"state": "WA", "count": 3} ] df1 = glueContext.sparkSession.sparkContext.parallelize(data_sample).toDF() dynf1 = DynamicFrame.fromDF(df1, glueContext, None)
  4. 다른 인수를 사용하여 “custom_filter_state”를 검증하려면 테스트하세요.

    스크린샷은 dynamicFrame.show 함수에 전달된 인수가 있는 AWS Glue 노트북의 셀을 보여줍니다.
  5. 여러 테스트를 실행한 후 확장명이 .py인 코드를 저장하고 .json 파일 이름을 미러링하는 이름으로 .py 파일의 이름을 지정합니다. .py 파일과 .json 파일은 동일한 변환 폴더에 있어야 합니다.

    다음 코드를 복사하여 파일에 붙여넣고 .py 파일 확장명으로 이름을 바꿉니다.

    from awsglue import DynamicFrame def custom_filter_state(self, colName, state): return self.filter(lambda row: row[colName] == state) DynamicFrame.custom_filter_state = custom_filter_state
  6. AWS Glue Studio에서 시각적 작업을 열고 사용 가능한 Transforms(변환) 목록에서 선택하여 작업에 변환을 추가합니다.

    Python 스크립트 코드에서 이 변환을 다시 사용하려면 “참조된 파일 경로” 아래의 작업에 있는 .py 파일에 Amazon S3 경로를 추가하고 스크립트에서 Python 파일 이름(확장자 제외)을 파일 상단에 추가하여 가져옵니다. 예를 들면 다음과 같습니다. import <name of the file (without the extension)>