5C. [Code Repositories] 데이터 변환을 통한 다중 출력4 - "생성된" 변환을 사용한 다중 결과물

본 번역은 검증되지 않았습니다. AIP를 통해 영문원문으로부터 번역되었습니다.

4 - "생성된" 변환을 사용한 다중 결과물

이 콘텐츠는 learn.palantir.com ↗에서도 제공되며 접근성 목적으로 여기에 제시되었습니다.

📖 작업 소개

분석팀이 승객 출신 국가별로 고유한 flight_alerts_joined_passengers 데이터셋을 생성하도록 요청했다고 가정해 봅시다. 이는 개인 정보를 제거하기 위해 추가 로직을 적용하기도 합니다. 예를 들어, 승객이 영국 출신인 모든 행을 flight_alerts_UK라는 새로운 데이터셋으로 보내는 등입니다. 이를 프로그램적으로 수행하는 한 가지 방법은 생성된 변환을 사용하는 것입니다. 이는 기본적으로 입력을 로직을 통해 실행하고 결과물을 생성하는 for 루프를 사용합니다. 생성된 변환을 실행할 때마다 입력에 새로운 승객이 추가되거나 새로운 승객-국가 조합이 도입되는 경우 새로운 데이터셋을 동적으로 추가하거나 생성합니다.

🔨 작업 지침

  1. Master에서 새로운 브랜치를 만들고 yourName/feature/generated_transform이라고 명명합니다.

  2. 저장소의 Files에서 /output 폴더를 마우스 오른쪽 버튼으로 클릭하고 flight_alerts_by_country.py라는 새 파일을 추가합니다.

  3. 새로운 파이썬 변환 파일의 기본 코드를 아래 코드 블록으로 바꿉니다.

    from transforms.api import transform_df, Input, Output
    from pyspark.sql import functions as F
    
    
    """
    Define a transform generator function that will create multiple output datasets
    이 함수는 문자열 배열(국가)을 입력으로 받습니다.
    """
    
    
    def transform_generator(countries):
    
        # 각 출력 데이터셋에 대해 개별 변환 함수를 저장할 빈 배열 초기화
        transforms = []
    
        # 국가 배열의 개별 문자열을 순회합니다.
        for country in countries:
            # 각 국가별로 출력 데이터셋 이름을 flight_alerts_COUNTRY로 만듭니다(출력 라인 끝부분에 있는 서식 참조).
            @transform_df(
                Output("/${space}/Temporary Training Artifacts/${yourName}/Data Engineering Tutorials/Transform Project: Flight Alerts by Country/data/output/flight_alerts_{country}".format(country=country)),
                source_df=Input("${flight_alerts_joined_passengers_RID}"),
            )
            def filter_by_country(source_df, country=country):
                """
                "country=country"를 이 함수의 범위에 포함시켜
                국가 변수의 값을 캡처하여 코드 내에서 사용할 수 있습니다.
                이 경우, 국가 열을 필터링하는 데 사용하겠습니다.
                주의: 소문자 문자열을 사용합니다.
                """
                filtered_df = source_df.filter(F.lower(F.col('country')) == country)
    
                # 여기에서 필요하지 않은 열을 제거합니다. 예를 들어, 민감한 승객 정보
                filtered_df = filtered_df.select(
                    'alert_display_name',
                    'flight_id',
                    'passenger_id',
                    'flight_date',
                    F.col('priority').alias('alert_priority'),
                    F.col('status').alias('alert_status'),
                    F.col('comment').alias('alert_comment'),
                    F.col('assignee').alias('alert_assignee'),
                    F.col('flyer_status').alias('passenger_status'),
                    F.col('country').alias('passenger_country'),
                )
    
                # 필터링된 데이터프레임을 반환하여 개별 변환을 완료합니다.
                return filtered_df
    
            # 완료된 변환을 변환 배열에 추가한 다음 for 루프에서 다음 항목으로 이동합니다.
            transforms.append(filter_by_country)
    
        # 실행할 준비가 된 변환 배열을 반환합니다.
        return transforms
    
    
    # 위에서 정의한 transform_generator 함수에 이 국가 목록을 넣고 각각 실행합니다.
    TRANSFORMS = transform_generator([
        'brazil',
        'canada',
        'france',
        'germany',
        'mexico',
        'netherlands',
        'uk',
        'us',
    ])
    
  4. 코드에서 다음 라인을 바꿉니다.

    • ${space}your space로 바꿉니다.
    • ${yourName}your /Tutorial Practice Artifacts 폴더 이름으로 바꿉니다.
    • ${flight_alerts_joined_passengers_RID}를 이전 작업의 변환된 출력의 RID로 바꿉니다(이것은 저장소의 flight_alerts_joined_passengers.py 파일에 있을 것입니다).
  5. 미리보기 버튼을 클릭합니다. 코드 구조를 고려할 때, 8개의 가능한 결과물 중 하나를 미리 볼 수 있습니다(코드의 57번째 줄에 있는 transform_generator에 의해 정의된 8개의 국가가 있습니다). 드롭다운에서 원하는 filter_by_country 값을 선택하여 미리보기를 실행합니다.

    미리보기 결과에 passenger_country 값이 선택한 filter_by_country 값과 같은 레코드만 포함되어 있는지 확인합니다. 예를 들어, filter_by_country (2)를 선택한 경우 결과는 코드의 57번째 줄에 있는 transform_generator에서 나열된 두 번째 값, 즉 canada에 해당할 것입니다.

    ℹ️ 이전 단계에서 입력이 존재하지 않는 브랜치에서 코드를 미리 봤습니다 — yourName/feature/generated_transform. fallback branches 개념을 통해 Foundry 빌드 프로세스(및 미리보기 옵션)는 현재 브랜치와 일치하는 브랜치를 찾을 수 없는 경우 입력의 Master 브랜치로 "되돌립니다". 저장소의 Settings → Branches → Fallback Branches에서 순차적인 fallback 브랜치 동작을 정의할 수도 있습니다. fallback 브랜치에 대한 자세한 내용은 여기에서 확인하세요.

  6. 의미 있는 메시지(예: "기능: 생성된 출력 추가")로 코드를 커밋합니다.

  7. 브랜치에서 코드를 빌드하고 .../Transform Project: Flight Alert Metrics/datasets/output/ 폴더에 각 국가별로 8개의 별도 데이터셋이 생성되는지 확인합니다.

  8. 빌드가 성공적이면 PR 프로세스를 완료하고 브랜치를 Master로 병합합니다(원하는 경우 병합 후 브랜치를 삭제할 수 있습니다).

  9. Master 브랜치에서 코드를 빌드합니다.

📚 추천 읽기 (~2분 읽기)

변환 생성은 고급 주제이며, 추가 맥락을 위해 관련 문서를 반드시 읽어보시길 권장합니다.