Python for Spark를 사용한 스크립팅

SPSS Modeler 는 데이터를 처리하기 위해 Apache Spark 프레임워크를 사용하여 Python 스크립트를 실행할 수 있습니다. 이 문서에서는 제공된 인터페이스에 대한 Python API 설명을 제공합니다.

SPSS Modeler 설치에는 Spark 배포가 포함되어 있습니다.

데이터 액세스

데이터는 Spark SQL DataFrame양식으로 Python/Spark 스크립트와 실행 컨텍스트 간에 전송됩니다. 데이터를 이용하는 스크립트 (즉, 가져오기 노드를 제외한 모든 노드) 는 컨텍스트에서 데이터 프레임을 검색해야 합니다.
inputData = asContext.getSparkInputData()
데이터를 생성하는 스크립트 (즉, 터미널 노드를 제외한 모든 노드) 는 컨텍스트에 데이터 프레임을 리턴해야 합니다.
asContext.setSparkOutputData(outputData)
SQL 컨텍스트를 사용하여 필요한 경우 RDD에서 출력 데이터 프레임을 작성할 수 있습니다.
outputData = sqlContext.createDataFrame(rdd)

데이터 모델 정의

데이터를 생성하는 노드는 노드의 필드 가시적 다운스트림을 설명하는 데이터 모델 도 정의해야 합니다. Spark SQL 용어에서 데이터 모델은 스키마입니다.

Python/Spark 스크립트는 pyspsark.sql.types.StructType 오브젝트 양식으로 출력 데이터 모델을 정의합니다. StructType 은 출력 데이터 프레임의 행을 설명하며 StructField 오브젝트 목록에서 구성됩니다. 각 StructField 는 출력 데이터 모델의 단일 필드를 설명합니다.

입력 데이터 프레임의 :schema 속성을 사용하여 입력 데이터에 대한 데이터 모델을 얻을 수 있습니다.
inputSchema = inputData.schema
변경되지 않은 상태로 전달되는 필드는 입력 데이터 모델에서 출력 데이터 모델로 복사할 수 있습니다. 출력 데이터 모델에서 새로 추가되거나 수정된 필드는 StructField 생성자를 사용하여 작성할 수 있습니다.
field = StructField(name, dataType, nullable=True, metadata=None)

생성자에 대한 정보는 Spark 문서를 참조하십시오.

최소한 필드 이름 및 해당 데이터 유형을 제공해야 합니다. 선택적으로 메타데이터를 지정하여 필드에 대한 측정, 역할 및 설명을 제공할 수 있습니다 ( 데이터 메타데이터참조).

DataModelOnly 모드

SPSS Modeler 는 노드가 실행되기 전에 노드의 출력 데이터 모델을 알아야 다운스트림 편집을 사용할 수 있습니다. Python/Spark 노드에 대한 출력 데이터 모델을 얻기 위해 SPSS Modeler 는 사용 가능한 데이터가 없는 특수 데이터 모델 전용 모드에서 스크립트를 실행합니다. 스크립트는 Analytic Server 컨텍스트 오브젝트에서 isComputeDataModelOnly 메소드를 사용하여 이 모드를 식별할 수 있습니다.

변환 노드의 스크립트는 다음과 같은 일반 패턴을 따를 수 있습니다.
if asContext.isComputeDataModelOnly():   
        inputSchema = asContext.getSparkInputSchema()   
        outputSchema = ... # construct the output data model   
        asContext.setSparkOutputSchema(outputSchema)
else:   
        inputData = asContext.getSparkInputData()   
        outputData = ... # construct the output data frame    
        asContext.setSparkOutputData(outputData)

모델 빌드

모델을 작성하는 노드는 모델을 적용하는 노드가 나중에 정확하게 다시 작성할 수 있도록 모델을 충분히 설명하는 일부 컨텐츠 를 실행 컨텍스트로 리턴해야 합니다.

모델 컨텐츠는 키 및 값의 의미가 작성 및 스코어 노드에만 알려져 있고 어떤 방식으로든 SPSS Modeler 에 의해 해석되지 않는 키/값 쌍의 관점에서 정의됩니다. 선택적으로 노드는 SPSS Modeler 가 모델 너깃에서 사용자에게 알려진 유형의 값을 표시할 수 있도록 MIME 유형을 값에 지정할 수 있습니다.

이 컨텍스트의 값은 PMML, HTML, 이미지 등일 수 있습니다. 모델 컨텐츠에 값을 추가하려면 (빌드 스크립트에서) 다음을 수행하십시오.
asContext.setModelContentFromString(key, value, mimeType=None)
모델 컨텐츠에서 값을 검색하려면 (점수 스크립트에서) 다음을 수행하십시오.
value = asContext.getModelContentToString(key)
모델 또는 모델의 일부가 파일 시스템의 파일 또는 폴더에 저장되는 바로 가기로서 빌드 스크립트에서 한 번의 호출로 해당 위치에 저장된 모든 컨텐츠를 번들화할 수 있습니다.
asContext.setModelContentFromPath(key, path)

이 경우 번들에 다양한 컨텐츠 유형이 포함될 수 있으므로 MIME 유형을 지정하는 옵션이 없습니다.

모델을 빌드하는 동안 컨텐츠를 저장할 임시 위치가 필요한 경우 컨텍스트에서 적절한 위치를 얻을 수 있습니다.
path = asContext.createTemporaryFolder()
파일 시스템의 임시 위치에서 기존 컨텐츠를 검색하려면 다음을 수행하십시오 (score 스크립트에서).
path = asContext.getModelContentToPath(key)

오류 처리

오류를 발생시키려면 스크립트에서 예외를 발생시키고 이를 SPSS Modeler 사용자에게 표시하십시오. 일부 예외는 spss.pyspark.exceptions모듈에 사전 정의되어 있습니다. 예를 들어,
from spss.pyspark.exceptions import ASContextException
if ... some error condition ...:
     raise ASContextException("message to display to user")