313.4.3. 주석이 달린 RDD 콜백

RDD 콜백으로 작업하는 가장 쉬운 방법은 @RddCallback 주석으로 클래스를 제공하는 것입니다.

RDD 콜백 정의 주석이 추가됨

import static org.apache.camel.component.spark.annotations.AnnotatedRddCallback.annotatedRddCallback;
 
@Bean
RddCallback<Long> rddCallback() {
    return annotatedRddCallback(new MyTransformation());
}
 
...
 
import org.apache.camel.component.spark.annotation.RddCallback;
 
public class MyTransformation {
 
    @RddCallback
    long countLines(JavaRDD<String> textFile, int first, int second) {
        return textFile.count() * first * second;
    }
 
}

주석이 달린 RDD 콜백 팩토리 메서드에 CamelContext를 전달할 경우 생성된 콜백은 주석이 달린 메서드의 매개변수와 일치하도록 들어오는 페이로드를 변환할 수 있습니다.

주석이 달린 RDD 콜백에 대한 본문 변환

import static org.apache.camel.component.spark.annotations.AnnotatedRddCallback.annotatedRddCallback;
 
@Bean
RddCallback<Long> rddCallback(CamelContext camelContext) {
    return annotatedRddCallback(new MyTransformation(), camelContext);
}
 
...

 
import org.apache.camel.component.spark.annotation.RddCallback;
 
public class MyTransformation {
 
    @RddCallback
    long countLines(JavaRDD<String> textFile, int first, int second) {
        return textFile.count() * first * second;
    }
 
}
 
...
 
// Convert String "10" to integer
long result = producerTemplate.requestBody("spark:rdd?rdd=#rdd&rddCallback=#rddCallback" Arrays.asList(10, "10"), long.class);