[java] 자바로 스파크의 스파크 MLlib 사용하기

Spark MLlib은 Spark에서 머신러닝 알고리즘을 사용할 수 있는 라이브러리입니다. 자바로 스파크 MLlib을 사용하는 방법에 대해 알아보겠습니다.

1. 스파크 MLlib 의존성 추가하기

먼저, Maven 또는 Gradle 프로젝트에서 스파크 MLlib의 의존성을 추가해야 합니다. 아래는 Maven을 사용하는 경우의 예시입니다.

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.12</artifactId>
        <version>3.1.1</version>
    </dependency>
</dependencies>

2. 스파크 컨텍스트 생성하기

SparkContext는 스파크의 기능을 사용하기 위해 필요한 핵심 객체입니다. 자바로 스파크 컨텍스트를 생성하는 방법은 다음과 같습니다.

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;

public class SparkMLExample {
    public static void main(String[] args) {
        // 스파크 설정 생성
        SparkConf conf = new SparkConf()
                .setAppName("Spark ML Example")
                .setMaster("local[*]");

        // 스파크 컨텍스트 생성
        JavaSparkContext sc = new JavaSparkContext(conf);
        
        // 여기에서부터 스파크 MLlib을 사용할 수 있습니다.
        
        // 스파크 컨텍스트 종료
        sc.stop();
    }
}

setMaster("local[*]")는 로컬 모드에서 스파크를 실행하고 모든 가능한 코어를 사용하도록 지정하는 코드입니다.

3. 스파크 MLlib 사용하기

스파크 MLlib을 사용하여 예제 머신러닝 알고리즘을 실행할 수 있습니다. 아래는 회귀(Regression) 예제를 실행하는 코드입니다.

import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.mllib.regression.LabeledPoint;
import org.apache.spark.mllib.regression.LinearRegressionModel;
import org.apache.spark.mllib.regression.LinearRegressionWithSGD;
import org.apache.spark.mllib.util.MLUtils;

public class SparkMLExample {
    public static void main(String[] args) {
        // 스파크 컨텍스트 생성 및 설정
        
        // 데이터 로드
        String path = "data/regression.txt";
        JavaRDD<LabeledPoint> data = MLUtils.loadLibSVMFile(sc.sc(), path).toJavaRDD();

        // 데이터 분할
        JavaRDD<LabeledPoint>[] splits = data.randomSplit(new double[]{0.7, 0.3});
        JavaRDD<LabeledPoint> trainingData = splits[0];
        JavaRDD<LabeledPoint> testData = splits[1];
        
        // 선형 회귀 모델 훈련
        int numIterations = 100;
        LinearRegressionModel model = LinearRegressionWithSGD.train(trainingData.rdd(), numIterations);

        // 테스트 데이터로 예측
        JavaRDD<Tuple2<Double, Double>> predictionAndLabel = testData.map(
                labeledPoint -> new Tuple2<>(model.predict(labeledPoint.features()), labeledPoint.label()));

        // 예측 결과 확인
        predictionAndLabel.take(10).forEach(System.out::println);
        
        // 스파크 컨텍스트 종료
        sc.stop();
    }
}

위 코드는 회귀 분석을 위한 선형 회귀(Linear Regression) 모델을 사용하는 예제입니다. 데이터는 regression.txt 파일에서 로드되며, 학습 데이터와 테스트 데이터로 분할됩니다. 모델을 학습하고 테스트 데이터에서 예측을 수행한 후, 결과를 확인합니다.

4. 참고 자료