사용자 정의 변환 생성 - AWS Glue Studio

사용자 정의 변환 생성

데이터에 대해 더 복잡한 변환을 수행해야 하거나 데이터 속성 키를 데이터 집합에 추가하려는 경우 작업 다이어그램에 [사용자 정의 코드(Custom code)] 변환을 추가할 수 있습니다. 사용자 정의 코드 노드를 사용하면 변환을 수행하는 스크립트를 입력할 수 있습니다.

사용자 정의 코드를 사용하는 경우 스키마 편집기를 사용하여 사용자 정의 코드를 통해 출력에 대한 변경 사항을 표시해야 합니다. 스키마를 편집할 때 다음 작업을 수행할 수 있습니다.

  • 데이터 속성 키 추가 또는 제거

  • 데이터 속성 키의 데이터 유형 변경

  • 데이터 속성 키의 이름 변경

  • 중첩 속성 키 재구성

출력을 대상 위치로 보내기 전에 사용자 정의 변환 노드의 결과에서 단일 DynamicFrame을 선택하려면 SelectFromCollection 변환을 사용해야 합니다.

다음 태스크를 사용하여 작업 다이어그램에 사용자 정의 변환 노드를 추가합니다.

작업 다이어그램에 사용자 정의 코드 변환 노드 추가

작업 다이어그램에 사용자 정의 변환 노드를 추가하려면

  1. (선택 사항) 시각적 편집기 상단의 도구 모음에서 [변환(Transform)]을 선택한 다음, 필요한 경우 [사용자 정의 변환(Custom transform)]을 선택하여 작업 다이어그램에 새 변환을 추가합니다.

  2. [노드 속성(Node properties)] 탭에서 작업 다이어그램에 노드 이름을 입력합니다. 노드 상위 항목이 아직 선택되지 않았거나 사용자 정의 변환에 대해 여러 입력을 원하는 경우 [노드 상위 항목(Node parents)] 목록에서 변환의 입력 소스로 사용할 노드를 선택합니다.

사용자 정의 변환 노드에 대한 코드 입력

입력 필드에 코드를 입력하거나 복사할 수 있습니다. 작업에서는 이 코드를 사용하여 데이터 변환을 수행합니다. Python 또는 Scala에서 코드 조각을 제공할 수 있습니다. 코드는 입력으로 하나 이상의 DynamicFrames를 취해야 하며 DynamicFrames 컬렉션을 반환합니다.

사용자 정의 변환 노드에 대한 스크립트를 입력하려면

  1. 작업 다이어그램에서 사용자 정의 변환 노드를 선택한 상태에서 [변환(Transform)] 탭을 선택합니다.

  2. 머리글 [코드 블록(Code block)] 아래의 텍스트 입력 필드에 변환 코드를 붙여넣거나 입력합니다. 사용하는 코드는 [작업 세부 정보(Job details)] 탭에서 작업에 대해 지정된 언어와 일치해야 합니다.

    코드에서 입력 노드를 참조할 때 AWS Glue Studio는 작업 다이어그램 노드에서 반환된 DynamicFrames의 이름을 생성 순서에 따라 순차적으로 지정합니다. 코드에 다음 이름 지정 방법 중 하나를 선택합니다.

    • 클래식 코드 생성 - 함수 이름을 사용하여 작업 다이어그램에서 노드를 참조합니다.

      • 데이터 원본 노드: DataSource0, DataSource1, DataSource2 등.

      • 변환 노드: Transform0, Transform1, Transform2 등.

    • 새 코드 생성 - 노드의 노드 속성(Node properties) 탭에서 지정된 이름에 '_node1', '_node2' 등을 추가하여 사용합니다. 예: S3bucket_node1, ApplyMapping_node2, S3bucket_node2, MyCustomNodeName_node1.

    새 코드 생성기에 대한 자세한 내용은 스크립트 코드 생성 섹션을 참조하세요.

다음 예는 코드 상자에 입력할 코드의 포맷을 보여줍니다.

Python

다음 예제에서는 처음 수신한 DynamicFrame을 가져와 DataFrame으로 변환하여 기본 필터 방식을 적용한 다음(1,000개 이상의 투표가 있는 레코드만 유지) 반환하기 전에 다시 DynamicFrame으로 변환합니다.

def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection: df = dfc.select(list(dfc.keys())[0]).toDF() df_filtered = df.filter(df["vote_count"] > 1000) dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes") return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
Scala

다음 예제에서는 처음 수신한 DynamicFrame을 가져와 DataFrame으로 변환하여 기본 필터 방식을 적용한 다음(1,000개 이상의 투표가 있는 레코드만 유지) 반환하기 전에 다시 DynamicFrame으로 변환합니다.

object FilterHighVoteCounts { def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = { val frame = input(0).toDF() val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext) Seq(filtered) } }

사용자 정의 변환 노드에서 스키마 편집

사용자 지정 변환 노드를 사용하는 경우 AWS Glue Studio는 변환을 통해 생성되는 출력 스키마를 자동으로 유추할 수 없습니다. 스키마 편집기를 사용하여 사용자 정의 변환 코드에 의해 구현된 스키마 변경 사항을 설명합니다.

사용자 정의 코드 노드에는 사용자 정의 코드에 대한 입력으로 DynamicFrame을 제공하는 상위 노드가 여러 개 있을 수 있습니다. 사용자 정의 코드 노드는 DynamicFrames의 컬렉션을 반환합니다. 입력으로 사용되는 각 DynamicFrame에는 연결된 스키마가 있습니다. 사용자 정의 코드 노드에서 반환된 각 DynamicFrame을 설명하는 스키마를 추가해야 합니다.

참고

사용자 지정 변환에서 사용자 고유의 스키마를 설정하면 AWS Glue Studio에서는 이전 노드의 스키마를 상속하지 않습니다. 스키마를 업데이트하려면 사용자 지정(Custom transform) 변환 노드를 선택한 다음 데이터 미리 보기(Data preview) 탭을 선택합니다. 미리 보기가 생성되면 '미리 보기 스키마 사용(Use Preview Schema)'을 선택합니다. 그러면 스키마가 미리 보기 데이터를 사용하는 스키마로 대체됩니다.

사용자 정의 변환 노드에 대한 출력 스키마를 편집하려면

  1. 작업 다이어그램에서 사용자 정의 변환 노드를 선택한 상태에서 노드 세부 정보 패널에서 [출력 스키마(Output schema)] 탭을 선택합니다.

  2. [편집(Edit)]을 선택하여 스키마를 변경합니다.

    배열 또는 객체와 같은 중첩 데이터 속성 키가 있는 경우 각 스키마 패널의 오른쪽 상단에 있는 [행 확장(Expand-Rows)] 아이콘( 
                  A double-ended arrow pointing upwards and downwards between two parallel
                    lines
                )을 선택하여 하위 데이터 속성 키 목록을 확장할 수 있습니다. 이 아이콘을 선택하면 하위 속성 키 목록을 축소하도록 선택할 수 있는 [행 축소(Collapse-Rows)] 아이콘( 
                  Two arrows, one pointing up to a line and one pointing down to the same
                    line
                )으로 변경됩니다.

  3. 페이지 오른쪽 섹션에서 다음 작업을 사용하여 스키마를 수정합니다.

    • 속성 키의 이름을 바꾸려면 속성 키의 [키(Key)] 텍스트 상자에 커서를 놓고 새 이름을 입력합니다.

    • 속성 키의 데이터 유형을 변경하려면 목록을 사용하여 속성 키의 새 데이터 유형을 선택합니다.

    • 스키마에 새 최상위 속성 키를 추가하려면 [취소(Cancel)] 버튼 왼쪽에 있는 [오버플로(Overflow)]( 
                      An ellipsis (...)
                    ) 아이콘을 선택한 다음 [루트 키 추가(Add root key)]를 선택합니다.

    • 스키마에 하위 속성 키를 추가하려면 상위 키와 연결된 [키 추가(Add-Key)] 아이콘 
                      A rectangle with a plus sign in the bottom left corner
                    을 선택합니다. 하위 키의 이름을 입력하고 데이터 유형을 선택합니다.

    • 스키마에서 속성 키를 제거하려면 키 이름의 맨 오른쪽에 있는 [제거(Remove)] 아이콘( 
                      An outline of a trash can
                    )을 선택합니다.

  4. 사용자 정의 변환 코드가 여러 DynamicFrames를 사용하는 경우 출력 스키마를 더 추가할 수 있습니다.

    • 비어 있는 새 스키마를 추가하려면 [오버플로(Overflow)]( 
                      An ellipsis (...)
                    ) 아이콘을 선택한 다음 [출력 스키마 추가(Add output schema)]를 선택합니다.

    • 기존 스키마를 새 출력 스키마로 복사하려면 복사하려는 스키마가 스키마 선택기에 표시되는지 확인합니다. [오버플로(Overflow)]( 
                      An ellipsis (...)
                    ) 아이콘을 선택한 다음 [복제(Duplicate)]를 선택합니다.

    출력 스키마를 제거하려면 복사하려는 스키마가 스키마 선택기에 표시되는지 확인합니다. [오버플로(Overflow)]( 
                  An ellipsis (...)
                ) 아이콘을 선택한 다음 [삭제(Delete)]를 선택합니다.

  5. 새 스키마에 새 루트 키를 추가하거나 복제된 키를 편집합니다.

  6. 출력 스키마를 수정할 때 [적용(Apply)] 버튼을 선택하여 변경 사항을 저장하고 스키마 편집기를 종료합니다.

    변경 사항을 저장하지 않으려면 [취소(Cancel)] 버튼을 선택합니다.

사용자 정의 변환 출력 구성

사용자 정의 코드 변환은 결과 집합에 DynamicFrame이 하나만 있더라도 DynamicFrames의 컬렉션을 반환합니다.

사용자 정의 변환 노드에서 출력을 처리하려면

  1. 사용자 정의 변환 노드가 상위 노드로 있는 SelectFromCollection 변환 노드를 추가합니다. 이 변환을 업데이트하여 사용하려는 데이터 집합을 나타냅니다. 자세한 정보는 SelectFromCollection을 사용하여 유지할 데이터 집합 선택 섹션을 참조하세요.

  2. 사용자 정의 변환 노드에서 생성된 추가 DynamicFrames를 사용하려면 작업 다이어그램에 SelectFromCollection 변환을 더 추가합니다.

    항공 데이터 집합을 여러 데이터 집합으로 분할하기 위해 사용자 정의 변환 노드를 추가하지만 비행 날짜 또는 항공편 번호와 같은 각 출력 스키마에서 일부 식별 속성 키를 복제하는 시나리오를 고려하세요. 사용자 정의 변환 노드를 상위 항목로 사용하여 각 출력 스키마에 대해 SelectFromCollection 변환 노드를 추가합니다.

  3. (선택 사항) 그런 다음 각 SelectFromCollection 변환 노드를 작업의 다른 노드에 대한 입력으로 사용하거나 데이터 대상 노드의 부모로 사용할 수 있습니다.