Java 변환 시작하기
Java transforms는 Java 라이브러리와 Spark로 Foundry 데이터셋을 처리합니다. 표를 받는 고수준 API와 파일 및 명시적 쓰기를 다루는 저수준 API가 있으며 배치, 증분 파이프라인과 저장소 사이 코드 공유를 지원합니다.
Java에서 Spark DataFrame은 Dataset<Row>로 표현합니다. 표 연산만 필요하면 고수준 변환이 권장되며, 파일 접근이나 여러 출력이 필요하면 저수준 변환을 사용합니다.
첫 변환
- 프로젝트에서
+ New > Repository를 선택하고 Language template을 Java로 정합니다. - Titanic 예제 ZIP을 내려받아 안의
titanic.csv를 Foundry 데이터셋으로 가져옵니다. - 저장소의 Java 소스 폴더인
transforms-java/src/main/java아래에 변환 클래스를 만듭니다. 기본 템플릿의myproject/datasets/HighLevelAutoTransform.java를 사용할 수도 있으며 주석으로 된 예제를 사용하려면 주석을 해제해야 합니다. - 입력과 출력 경로를 같은 프로젝트 범위의 실제 자산으로 지정합니다. 다른 프로젝트의 입력은 프로젝트 참조가 필요합니다.
다음은 myproject/datasets/FemalePassengers.java의 전체 예입니다. 경로는 가상 프로젝트 값이며 실제 업로드한 Titanic 데이터셋에는 Sex 열이 있어야 합니다.
package myproject.datasets;
import com.palantir.transforms.lang.java.api.Compute;
import com.palantir.transforms.lang.java.api.Input;
import com.palantir.transforms.lang.java.api.Output;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
public final class FemalePassengers {
@Compute
@Output("/Example Project/Outputs/female_passengers")
public Dataset<Row> compute(
@Input("/Example Project/Inputs/titanic") Dataset<Row> input) {
return input.filter(input.col("Sex").equalTo("female"));
}
}
이 변환은 여러 입력에서 표 하나를 반환할 수 있는 고수준 방식이며 입력과 출력 annotation으로 자동 등록합니다.
파이프라인 진입점
Java 하위 프로젝트에는 PipelineDefiner 구현 하나가 필요합니다. myproject/MyPipelineDefiner.java에서 변환 패키지를 등록합니다.
package myproject;
import com.palantir.transforms.lang.java.api.Pipeline;
import com.palantir.transforms.lang.java.api.PipelineDefiner;
public final class MyPipelineDefiner implements PipelineDefiner {
@Override
public void define(Pipeline pipeline) {
pipeline.autoBindFromPackage("myproject.datasets");
}
}
transforms-java/src/main/resources/META-INF/services/com.palantir.transforms.lang.java.api.PipelineDefiner에는 다음 구현 이름 한 줄을 둡니다.
myproject.MyPipelineDefiner
변경을 commit하고 checks가 성공하면 출력 데이터셋을 열어 빌드합니다. 출력의 실행 로직은 저장소 등록과 발행 절차를 거쳐야 합니다.
다음으로 다룰 계약
변환과 등록 방식에서 고수준/저수준과 자동/수동 조합, TransformContext를 설명합니다. 단위 테스트, 최대 실행 시간, 저장소 간 코드 공유, 로컬 개발을 함께 구성할 수 있습니다.
새 입력만 처리하려면 증분 읽기와 쓰기를 함께 설정합니다. 파일 및 ZIP 처리, 압축 CSV 읽기와 Spark SQL 연산은 각각 파일 입력과 표 연산을 다룹니다. Pipeline Builder에서도 재사용할 Java 로직은 UDF 정의와 게시로 구성합니다.