이 콘텐츠는 learn.palantir.com ↗에서도 제공되며 접근성 목적으로 여기에 제시되었습니다.
분석팀이 승객 출신 국가별로 고유한 flight_alerts_joined_passengers
데이터셋을 생성하도록 요청했다고 가정해 봅시다. 이는 개인 정보를 제거하기 위해 추가 로직을 적용하기도 합니다. 예를 들어, 승객이 영국 출신인 모든 행을 flight_alerts_UK
라는 새로운 데이터셋으로 보내는 등입니다. 이를 프로그램적으로 수행하는 한 가지 방법은 생성된 변환을 사용하는 것입니다. 이는 기본적으로 입력을 로직을 통해 실행하고 결과물을 생성하는 for 루프를 사용합니다. 생성된 변환을 실행할 때마다 입력에 새로운 승객이 추가되거나 새로운 승객-국가 조합이 도입되는 경우 새로운 데이터셋을 동적으로 추가하거나 생성합니다.
Master
에서 새로운 브랜치를 만들고 yourName/feature/generated_transform
이라고 명명합니다.
저장소의 Files에서 /output
폴더를 마우스 오른쪽 버튼으로 클릭하고 flight_alerts_by_country.py
라는 새 파일을 추가합니다.
새로운 파이썬 변환 파일의 기본 코드를 아래 코드 블록으로 바꿉니다.
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',
])
코드에서 다음 라인을 바꿉니다.
${space}
를 your space로 바꿉니다.${yourName}
를 your /Tutorial Practice Artifacts
폴더 이름으로 바꿉니다.${flight_alerts_joined_passengers_RID}
를 이전 작업의 변환된 출력의 RID로 바꿉니다(이것은 저장소의 flight_alerts_joined_passengers.py
파일에 있을 것입니다).미리보기 버튼을 클릭합니다. 코드 구조를 고려할 때, 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 브랜치에 대한 자세한 내용은 여기에서 확인하세요.
의미 있는 메시지(예: "기능: 생성된 출력 추가")로 코드를 커밋합니다.
브랜치에서 코드를 빌드하고 .../Transform Project: Flight Alert Metrics/datasets/output/
폴더에 각 국가별로 8개의 별도 데이터셋이 생성되는지 확인합니다.
빌드가 성공적이면 PR 프로세스를 완료하고 브랜치를 Master
로 병합합니다(원하는 경우 병합 후 브랜치를 삭제할 수 있습니다).
Master
브랜치에서 코드를 빌드합니다.
변환 생성은 고급 주제이며, 추가 맥락을 위해 관련 문서를 반드시 읽어보시길 권장합니다.