Transforms 작업에 사용자 정의 Spark 속성을 적용하려면 다음과 같이 진행할 수 있습니다.
특정 작업에 Spark 속성을 적용하려면:
기본 제공되는 Spark 프로파일의 특성에 대해 더 알아보려면 Spark 프로파일 참조 섹션을 참고하세요.
또한 Spark 프로파일 조정을 위한 권장 모범 사례도 참고하세요.
사용자 정의 Spark 프로파일 지정은 모든 언어에서 지원됩니다. 아래의 모든 경우에서 설정은 왼쪽에서 오른쪽으로 평가됩니다. 여러 프로파일이 동일한 설정을 지정하면 목록 끝에 가까운 프로파일이 우선순위를 가집니다.
파이썬 코드에서 profile1
및 profile2
프로파일을 참조하려면, Transform 객체를 감싸는 configure
데코레이터를 사용하세요. 이 데코레이터는 사용자 정의 Transforms 프로파일 목록을 참조하는 profile
파라미터를 사용합니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12
from transforms.api import configure @configure(profile=['profile1', 'profile2']) @transform( # 입력 데이터셋 my_input=Input("/path/to/input/dataset"), # 출력 데이터셋 my_ouput=Output("/path/to/output/dataset"), ) # 데이터 변환 코드 def my_compute_function(my_input): return my_input
자동 등록된 변환은 Java 코드에서 TransformProfiles
주석을 사용하여 계산 기능에서 profile1
및 profile2
프로필을 참조할 수 있습니다. 이 주석은 사용자 지정 Spark 프로필의 배열을 참조하는 파라미터를 사용합니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import com.palantir.transforms.lang.java.api.TransformProfiles; /** * 이것은 자동 등록을 위한 예시로 작성된 저수준(Transform)입니다. */ public final class LowLevel { @Compute @TransformProfiles({ "profile1", "profile2" }) // 계산 함수를 정의합니다. public void myComputeFunction( // 입력 데이터셋 경로를 지정합니다. @Input("/path/to/input/dataset") FoundryInput myInput, // 출력 데이터셋 경로를 지정합니다. @Output("/path/to/output/dataset") FoundryOutput myOutput) { // 입력 데이터셋에서 처음 10개의 데이터만 불러옵니다. Dataset<Row> limited = myInput.asDataFrame().read().limit(10); // 불러온 데이터를 출력 데이터셋으로 작성합니다. myOutput.getDataFrameWriter(limited).write(); } }
대안적으로, 수동 등록을 사용하는 경우, builder
메서드 transformProfiles()
를 사용할 수 있습니다:
Copied!1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public final class MyPipelineDefiner implements PipelineDefiner { @Override public void define(Pipeline pipeline) { LowLevelTransform lowLevelManualTransform = LowLevelTransform.builder() .transformProfiles(ImmutableList.of("profile1", "profile2")) // 사용할 계산 함수를 전달합니다. 여기서 "LowLevelManualFunction"은 low-level Transform에 대한 계산 함수의 클래스 이름에 해당합니다. .computeFunctionInstance(new LowLevelManualFunction()) // "myInput"에 대한 입력 별칭으로 매개변수를 전달합니다. "/path/to/input/dataset"은 입력 데이터셋의 경로를 나타냅니다. .putParameterToInputAlias("myInput", "/path/to/input/dataset") // "myOutput"에 대한 출력 별칭으로 매개변수를 전달합니다. "/path/to/output/dataset"은 출력 데이터셋의 경로를 나타냅니다. .putParameterToOutputAlias("myOutput", "/path/to/output/dataset") .build(); // 파이프라인에 lowLevelManualTransform을 등록합니다. pipeline.register(lowLevelManualTransform); } }
profile1
과 profile2
프로필을 SQL 코드에 참조하려면 테이블의 foundry_transform_profiles
속성을 설정할 수 있습니다:
Copied!1 2 3 4 5 6
-- 테이블 생성하기 CREATE TABLE `/path/to/output` -- 테이블 속성 설정하기 (foundry_transform_profiles는 'profile1, profile2'로 설정) TBLPROPERTIES (foundry_transform_profiles = 'profile1, profile2') -- '/path/to/input'에서 선택된 모든 데이터를 사용하여 테이블 생성 AS SELECT * FROM `/path/to/input`
다음은 대체 SQL 구문을 사용한 다른 예입니다:
Copied!1 2 3 4
-- 테이블 생성 CREATE TABLE `/path/to/output` USING foo_bar OPTIONS (foundry_transform_profiles = 'profile1, profile2') -- 입력 경로에서 데이터를 선택하여 테이블에 삽입 AS SELECT * FROM `/path/to/input`;
ANSI SQL 모드에서는 현재 커스텀 변환 프로파일을 지정하는 것이 지원되지 않습니다.