Show Menu
화제×

SDK 개발자 가이드

Model Authoring SDK를 사용하면 Adobe Experience Platform Data Science Workspace에서 사용할 수 있는 맞춤형 머신 러닝 레서피 및 기능 파이프라인을 개발할 수 있으며 PySpark 및 Spark에서 구현 가능한 템플릿을 제공할 수 있습니다.
이 문서에서는 모델 작성 SDK 내에 있는 다양한 클래스에 대한 정보를 제공합니다.

DataLoader

DataLoader 클래스는 원시 입력 데이터의 검색, 필터링 및 반환과 관련된 모든 것을 캡슐화합니다. 입력 데이터의 예로는 트레이닝, 점수 지정 또는 기능 엔지니어링 등이 있습니다. 데이터 로더는 추상 클래스를 DataLoader 확장하고 추상 메서드를 재정의해야 합니다 load .
PySpark
다음 표에서는 PySpark Data Loader 클래스의 추상 메서드에 대해 설명합니다.
방법 및 설명 매개 변수
load(self, configProperties, spark)
팬더 DataFrame으로 플랫폼 데이터 로드 및 반환
  • self :자체 참조
  • configProperties :구성 속성 맵
  • spark :Spark 세션
Spark
다음 표에서는 Spark Data Loader 클래스의 추상 메서드에 대해 설명합니다.
방법 및 설명 매개 변수
load(configProperties, sparkSession)
플랫폼 데이터를 DataFrame으로 로드 및 반환
  • configProperties :구성 속성 맵
  • sparkSession :Spark 세션

플랫폼 데이터 세트에서 데이터 로드

다음 예제에서는 ID로 플랫폼 데이터를 검색하고 DataFrame을 반환합니다. 여기서 데이터 세트 ID( datasetId )는 구성 파일에서 정의된 속성입니다.
PySpark
# PySpark

from sdk.data_loader import DataLoader

class MyDataLoader(DataLoader):
    """
    Implementation of DataLoader which loads a DataFrame and prepares data
    """

    def load(self, configProperties, spark):
        """
        Load and return dataset

        :param configProperties:    Configuration properties
        :param spark:               Spark session
        :return:                    DataFrame
        """

        # preliminary checks
        if configProperties is None :
            raise ValueError("configProperties parameter is null")
        if spark is None:
            raise ValueError("spark parameter is null")

        # prepare variables
        dataset_id = str(
            configProperties.get("datasetId"))
        service_token = str(
            spark.sparkContext.getConf().get("ML_FRAMEWORK_IMS_ML_TOKEN"))
        user_token = str(
            spark.sparkContext.getConf().get("ML_FRAMEWORK_IMS_TOKEN"))
        org_id = str(
            spark.sparkContext.getConf().get("ML_FRAMEWORK_IMS_ORG_ID"))
        api_key = str(
            spark.sparkContext.getConf().get("ML_FRAMEWORK_IMS_CLIENT_ID"))

        # validate variables
        for arg in ['dataset_id', 'service_token', 'user_token', 'org_id', 'api_key']:
            if eval(arg) == 'None':
                raise ValueError("%s is empty" % arg)

        # load dataset through Spark session
        pd = spark.read.format("com.adobe.platform.dataset") \
            .option('serviceToken', service_token) \
            .option('userToken', user_token) \
            .option('orgId', org_id) \
            .option('serviceApiKey', api_key) \
            .load(dataset_id)

        # return as DataFrame
        return pd

Spark
// Spark

import com.adobe.platform.ml.config.ConfigProperties
import com.adobe.platform.ml.sdk.DataLoader
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
 * Implementation of DataLoader which loads a DataFrame and prepares data
 */
class MyDataLoader extends DataLoader {

    /**
     * @param configProperties  - Configuration properties
     * @param sparkSession      - Spark session
     * @return                  - DataFrame
     */
    override def load(configProperties: ConfigProperties, sparkSession: SparkSession): DataFrame = {

        // preliminary checks
        require(configProperties != null)
        require(sparkSession != null)

        // prepare variables
        val dataSetId: String = configProperties
            .get("datasetId").getOrElse("")
        val serviceToken: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_ML_TOKEN", "").toString
        val userToken: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_TOKEN", "").toString
        val orgId: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_ORG_ID", "").toString
        val apiKey: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_CLIENT_ID", "").toString

        // validate variables
        List(dataSetId, serviceToken, userToken, orgId, apiKey).foreach(
            value => required(value != "")
        )

        // load dataset through Spark session
        var df = sparkSession.read.format("com.adobe.platform.dataset")
            .option(DataSetOptions.orgId, orgId)
            .option(DataSetOptions.serviceToken, serviceToken)
            .option(DataSetOptions.userToken, userToken)
            .option(DataSetOptions.serviceApiKey, apiKey)
            .load(dataSetId)
        
        // return as DataFrame
        df
    }
}

DataSaver

DataSaver 클래스는 점수 지정 또는 기능 엔지니어링 등의 출력 데이터 저장과 관련된 모든 것을 캡슐화합니다. 데이터 보호자는 추상 클래스를 DataSaver 확장하고 추상 메서드를 재정의해야 합니다 save .
PySpark
다음 표에서는 PySpark Data Saver 클래스의 개요 메서드를 설명합니다.
방법 및 설명 매개 변수
save(self, configProperties, dataframe)
출력 데이터를 DataFrame으로 받아 플랫폼 데이터 세트에 저장
  • self :자체 참조
  • configProperties :구성 속성 맵
  • dataframe :DataFrame 형식으로 저장할 데이터
Spark
다음 표에서는 Spark Data Saver 클래스의 개요 메서드를 설명합니다.
방법 및 설명 매개 변수
save(configProperties, dataFrame)
출력 데이터를 DataFrame으로 받아 플랫폼 데이터 세트에 저장
  • configProperties :구성 속성 맵
  • dataFrame :DataFrame 형식으로 저장할 데이터

플랫폼 데이터 세트에 데이터 저장

플랫폼 데이터 세트에 데이터를 저장하려면 구성 파일에서 속성을 제공하거나 정의해야 합니다.
  • 데이터를 저장할 올바른 플랫폼 데이터 집합 ID
  • 조직에 속하는 테넌트 ID
다음 예제에서는 데이터 세트( prediction )를 플랫폼 데이터 세트에 저장합니다. 여기서 데이터 세트 ID( datasetId ) 및 테넌트 ID( tenantId )는 구성 파일 내에서 정의된 속성입니다.
PySpark
# PySpark

from sdk.data_saver import DataSaver
from pyspark.sql.types import StringType, TimestampType


class MyDataSaver(DataSaver):
    """
    Implementation of DataSaver which stores a DataFrame to a Platform dataset
    """

    def save(self, configProperties, prediction):
        """
        Store DataFrame to a Platform dataset

        :param configProperties:    Configuration properties
        :param prediction:          DataFrame to be stored to a Platform dataset
        """

        # Spark context
        sparkContext = prediction._sc

        # preliminary checks
        if configProperties is None:
            raise ValueError("configProperties parameter is null")
        if prediction is None:
            raise ValueError("prediction parameter is null")
        if sparkContext is None:
            raise ValueError("sparkContext parameter is null")

        # prepare variables
        timestamp = "2019-01-01 00:00:00"
        output_dataset_id = str(
            configProperties.get("datasetId"))
        tenant_id = str(
            configProperties.get("tenantId"))
        service_token = str(
            sparkContext.getConf().get("ML_FRAMEWORK_IMS_ML_TOKEN"))
        user_token = str(
            sparkContext.getConf().get("ML_FRAMEWORK_IMS_TOKEN"))
        org_id = str(
            sparkContext.getConf().get("ML_FRAMEWORK_IMS_ORG_ID"))
        api_key = str(
            sparkContext.getConf().get("ML_FRAMEWORK_IMS_CLIENT_ID"))

        # validate variables
        for arg in ['output_dataset_id', 'tenant_id', 'service_token', 'user_token', 'org_id', 'api_key']:
            if eval(arg) == 'None':
                raise ValueError("%s is empty" % arg)

        # store data into dataset
        prediction.write.format("com.adobe.platform.dataset") \
            .option('orgId', org_id) \
            .option('serviceToken', service_token) \
            .option('userToken', user_token) \
            .option('serviceApiKey', api_key) \
            .save(output_dataset_id)

Spark
// Spark

import com.adobe.platform.dataset.DataSetOptions
import com.adobe.platform.ml.config.ConfigProperties
import com.adobe.platform.ml.impl.Constants
import com.adobe.platform.ml.sdk.DataSaver
import org.apache.spark.sql.DataFrame
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types.TimestampType

/**
 * Implementation of DataSaver which stores a DataFrame to a Platform dataset
 */
class ScoringDataSaver extends DataSaver {

    /**
     * @param configProperties  - Configuration properties
     * @param dataFrame         - DataFrame to be stored to a Platform dataset
     */
    override def save(configProperties: ConfigProperties, dataFrame: DataFrame): Unit =  {

        // Spark session
        val sparkSession = dataFrame.sparkSession
        import sparkSession.implicits._

        // preliminary checks
        require(configProperties != null)
        require(dataFrame != null)

        // prepare variables
        val predictionColumn = configProperties.get(Constants.PREDICTION_COL)
            .getOrElse(Constants.DEFAULT_PREDICTION)
        val timestamp:String = "2019-01-01 00:00:00"
        val output_dataset_id: String = configProperties
            .get("datasetId").getOrElse("")
        val tenant_id:String = configProperties
            .get("tenantId").getOrElse("")
        val serviceToken: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_ML_TOKEN", "").toString
        val userToken: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_TOKEN", "").toString
        val orgId: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_ORG_ID", "").toString
        val apiKey: String = sparkSession.sparkContext.getConf
            .get("ML_FRAMEWORK_IMS_CLIENT_ID", "").toString

        // validate variables
        List(output_dataset_id, tenant_id, serviceToken, userToken, orgId, apiKey).foreach(
            value => require(value != "")
        )

        // store data into dataset
        dataFrame.write.format("com.adobe.platform.dataset")
            .option(DataSetOptions.orgId, orgId)
            .option(DataSetOptions.serviceToken, serviceToken)
            .option(DataSetOptions.userToken, userToken)
            .option(DataSetOptions.serviceApiKey, apiKey)
            .save(output_dataset_id)
    }
}

DatasetTransformer

DatasetTransformer 클래스는 데이터 집합의 구조를 수정 및 변환합니다. Sensei 기계 학습 런타임은 이 구성 요소를 정의할 필요가 없으며 사용자의 요구 사항에 따라 구현됩니다.
기능 파이프라인과 관련하여 데이터 세트 변압기는 기능 파이프라인 팩터리와 함께 사용하여 기능 엔지니어링 데이터를 준비할 수 있습니다.
PySpark
다음 표에서는 PySpark 데이터 세트 변환기 클래스의 클래스 메서드를 설명합니다.
방법 및 설명 매개 변수
abstract transform(self, configProperties, dataset)
데이터 세트를 입력으로 가져와 새로운 파생 데이터 세트를 출력합니다.
  • self :자체 참조
  • configProperties :구성 속성 맵
  • dataset :변환을 위한 입력 데이터 세트
Spark
다음 표에서는 Spark 데이터 세트 변환기 클래스의 추상적인 메서드를 설명합니다.
방법 및 설명 매개 변수
transform(configProperties, dataset)
데이터 세트를 입력으로 가져와 새로운 파생 데이터 세트를 출력합니다.
  • configProperties :구성 속성 맵
  • dataset :변환을 위한 입력 데이터 세트

FeaturePipelineFactory

FeaturePipelineFactory 클래스에는 기능 추출 알고리즘이 포함되어 있으며 처음부터 끝까지 피쳐 파이프라인의 단계가 정의됩니다.
PySpark
다음 표에서는 PySpark FeaturePipelineFactory의 클래스 메서드에 대해 설명합니다.
방법 및 설명 매개 변수
abstract create_pipeline(self, configProperties)
일련의 Spark Transformers가 포함된 Spark Pipeline을 만들어 다시 전송
  • self :자체 참조
  • configProperties :구성 속성 맵
abstract get_param_map(self, configProperties, sparkSession)
구성 속성에서 매개 변수 맵 검색 및 반환
  • self :자체 참조
  • configProperties :구성 속성
  • sparkSession :Spark 세션
Spark
다음 표에서는 Spark FeaturePipelineFactory의 클래스 메서드에 대해 설명합니다.
방법 및 설명 매개 변수
abstract createPipeline(configProperties)
여러 개의 트랜스포머가 포함된 파이프라인 생성 및 반환
  • configProperties :구성 속성 맵
abstract getParamMap(configProperties, sparkSession)
구성 속성에서 매개 변수 맵 검색 및 반환
  • configProperties :구성 속성
  • sparkSession :Spark 세션

PipelineFactory

PipelineFactory 클래스는 트레이닝 로직과 알고리즘이 Spark Pipeline 형식으로 정의되는 모델 트레이닝 및 점수에 대한 메서드 및 정의를 캡슐화합니다.
PySpark
다음 표에서는 PySpark PipelineFactory의 클래스 메서드에 대해 설명합니다.
방법 및 설명 매개 변수
abstract apply(self, configProperties)
모델 트레이닝 및 점수 지정 로직과 알고리즘이 포함된 스파크 파이프라인 만들기 및 반환
  • self :자체 참조
  • configProperties :구성 속성
abstract train(self, configProperties, dataframe)
모델 트레이닝을 위한 로직과 알고리즘이 포함된 사용자 지정 파이프라인을 반환합니다. Spark Pipeline을 사용하는 경우에는 이 방법이 필요하지 않습니다
  • self :자체 참조
  • configProperties :구성 속성
  • dataframe :트레이닝 입력을 위한 기능 데이터 세트
abstract score(self, configProperties, dataframe, model)
교육된 모델을 사용하여 점수를 매기고 결과를 반환합니다.
  • self :자체 참조
  • configProperties :구성 속성
  • dataframe :점수 지정을 위한 데이터 세트 입력
  • model :점수 매기에 사용되는 트레이닝된 모델
abstract get_param_map(self, configProperties, sparkSession)
구성 속성에서 매개 변수 맵 검색 및 반환
  • self :자체 참조
  • configProperties :구성 속성
  • sparkSession :Spark 세션
Spark
다음 표에서는 Spark PipelineFactory의 클래스 메서드에 대해 설명합니다.
방법 및 설명 매개 변수
abstract apply(configProperties)
모델 트레이닝 및 점수부여에 대한 로직과 알고리즘이 포함된 파이프라인 생성 및 반환
  • configProperties :구성 속성
abstract getParamMap(configProperties, sparkSession)
구성 속성에서 매개 변수 맵 검색 및 반환
  • configProperties :구성 속성
  • sparkSession :Spark 세션

MLEvaluator

MLEvaluator 클래스는 평가 지표를 정의하고 교육 집합 및 테스트 데이터 집합을 확인하는 메서드를 제공합니다.
PySpark
다음 표에서는 PySpark MLEvaluator의 클래스 메서드를 설명합니다.
방법 및 설명 매개 변수
abstract split(self, configProperties, dataframe)
입력 데이터 세트를 트레이닝 및 테스트 하위 세트로 분할
  • self :자체 참조
  • configProperties :구성 속성
  • dataframe :분할할 입력 데이터 세트
abstract evaluate(self, dataframe, model, configProperties)
교육된 모델을 평가하고 평가 결과를 반환합니다.
  • self :자체 참조
  • dataframe :교육 및 테스트 데이터로 구성된 DataFrame
  • model :트레이닝 모델
  • configProperties :구성 속성
Spark
다음 표에서는 Spark MLEvaluator의 클래스 메서드를 설명합니다.
방법 및 설명 매개 변수
abstract split(configProperties, data)
입력 데이터 세트를 트레이닝 및 테스트 하위 세트로 분할
  • configProperties :구성 속성
  • data :분할할 입력 데이터 세트
abstract evaluate(configProperties, model, data)
교육된 모델을 평가하고 평가 결과를 반환합니다.
  • configProperties :구성 속성
  • model :트레이닝 모델
  • data :교육 및 테스트 데이터로 구성된 DataFrame