

# Scala의 AWS Glue ETL 스크립트 프로그래밍
<a name="aws-glue-programming-scala"></a>

AWS Glue용 Scala 코드 예제와 유틸리티는 GitHub 웹 사이트의 [AWS Glue 샘플 리포지토리](https://github.com/awslabs/aws-glue-samples)에서 찾을 수 있습니다.

AWS Glue는 추출, 변환, 로드 작업 스크립트의 PySpark Scala의 확장 언어를 지원합니다. 다음 섹션은 AWS GlueScala 라이브러리와 ETL 스크립트의 AWS Glue API를 사용하고 라이브러리용 참조 문서를 제공하는 방법에 대해 설명합니다.

**Contents**
+ [Scala 사용하기](glue-etl-scala-using.md)
  + [DevEndpoint Notebook 테스트](glue-etl-scala-using.md#aws-glue-programming-scala-using-notebook)
  + [DevEndpoint REPL 테스트하기](glue-etl-scala-using.md#aws-glue-programming-scala-using-repl)
+ [Scala 스크립트 예](glue-etl-scala-example.md)
+ [Scala API 목록](glue-etl-scala-apis.md)
  + [com.amazonaws.services.glue](glue-etl-scala-apis.md#glue-etl-scala-apis-glue)
  + [com.amazonaws.services.glue.ml](glue-etl-scala-apis.md#glue-etl-scala-apis-glue-ml)
  + [com.amazonaws.services.glue.dq](glue-etl-scala-apis.md#glue-etl-scala-apis-glue-dq)
  + [com.amazonaws.services.glue.types](glue-etl-scala-apis.md#glue-etl-scala-apis-glue-types)
  + [com.amazonaws.services.glue.util](glue-etl-scala-apis.md#glue-etl-scala-apis-glue-util)
  + [ChoiceOption](glue-etl-scala-apis-glue-choiceoption.md)
    + [ChoiceOption 특성](glue-etl-scala-apis-glue-choiceoption.md#glue-etl-scala-apis-glue-choiceoption-trait)
    + [ChoiceOption 객체](glue-etl-scala-apis-glue-choiceoption.md#glue-etl-scala-apis-glue-choiceoption-object)
      + [Apply](glue-etl-scala-apis-glue-choiceoption.md#glue-etl-scala-apis-glue-choiceoption-object-def-apply)
    + [ChoiceOptionWithResolver](glue-etl-scala-apis-glue-choiceoption.md#glue-etl-scala-apis-glue-choiceoptionwithresolver-case-class)
    + [MatchCatalogSchemaChoiceOption](glue-etl-scala-apis-glue-choiceoption.md#glue-etl-scala-apis-glue-matchcatalogschemachoiceoption-case-class)
  + [DataSink](glue-etl-scala-apis-glue-datasink-class.md)
    + [writeDynamicFrame](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-writeDynamicFrame)
    + [pyWriteDynamicFrame](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-pyWriteDynamicFrame)
    + [writeDataFrame](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-writeDataFrame)
    + [pyWriteDataFrame](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-pyWriteDataFrame)
    + [setCatalogInfo](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-setCatalogInfo)
    + [supportsFormat](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-supportsFormat)
    + [setFormat](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-setFormat)
    + [withFormat](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-withFormat)
    + [setAccumulableSize](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-setAccumulableSize)
    + [getOutputErrorRecordsAccumulable](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-getOutputErrorRecordsAccumulable)
    + [errorsAsDynamicFrame](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-class-defs-errorsAsDynamicFrame)
    + [DataSink 객체](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-object)
      + [recordMetrics](glue-etl-scala-apis-glue-datasink-class.md#glue-etl-scala-apis-glue-datasink-object-defs-recordMetrics)
  + [DataSource 특성](glue-etl-scala-apis-glue-datasource-trait.md)
  + [DynamicFrame](glue-etl-scala-apis-glue-dynamicframe.md)
    + [DynamicFrame 클래스](glue-etl-scala-apis-glue-dynamicframe-class.md)
      + [errorsCount](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-vals-errorsCount)
      + [applyMapping](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-applyMapping)
      + [assertErrorThreshold](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-assertErrorThreshold)
      + [개수](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-count)
      + [dropField](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-dropField)
      + [dropFields](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-dropFields)
      + [dropNulls](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-dropNulls)
      + [errorsAsDynamicFrame](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-errorsAsDynamicFrame)
      + [필터](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-filter)
      + [getName](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-getName)
      + [getNumPartitions](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-getNumPartitions)
      + [getSchemaIfComputed](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-getSchemaIfComputed)
      + [isSchemaComputed](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-isSchemaComputed)
      + [javaToPython](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-javaToPython)
      + [조인](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-join)
      + [맵](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-map)
      + [mergeDynamicFrames](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-merge)
      + [printSchema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-printSchema)
      + [recomputeSchema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-recomputeSchema)
      + [관계화](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-relationalize)
      + [renameField](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-renameField)
      + [repartition](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-repartition)
      + [resolveChoice](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-resolveChoice)
      + [스키마](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-schema)
      + [selectField](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-selectField)
      + [selectFields](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-selectFields)
      + [표시](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-show)
      + [SimplifyDDBJson](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-simplifyDDBJson)
      + [Spigot](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-spigot)
      + [splitFields](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-splitFields)
      + [def splitRows](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-splitRows)
      + [stageErrorsCount](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-stageErrorsCount)
      + [toDF](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-toDF)
      + [개봉](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-unbox)
      + [unnest](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-unnest)
      + [unnestDDBJson](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-unnestddbjson)
      + [withFrameSchema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-withFrameSchema)
      + [def withName](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-withName)
      + [withTransformationContext](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-withTransformationContext)
    + [DynamicFrame 객체](glue-etl-scala-apis-glue-dynamicframe-object.md)
      + [def apply](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-apply)
      + [def emptyDynamicFrame](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-emptyDynamicFrame)
      + [def fromPythonRDD](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-fromPythonRDD)
      + [def ignoreErrors](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-ignoreErrors)
      + [def inlineErrors](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-inlineErrors)
      + [def newFrameWithErrors](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-newFrameWithErrors)
  + [DynamicRecord](glue-etl-scala-apis-glue-dynamicrecord-class.md)
    + [addField](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-addField)
    + [dropField](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-dropField)
    + [setError](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-setError)
    + [isError](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-isError)
    + [getError](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getError)
    + [clearError](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-clearError)
    + [쓰기](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-write)
    + [readFields](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-readFields)
    + [복제](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-clone)
    + [스키마](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-schema)
    + [getRoot](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getRoot)
    + [toJson](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-toJson)
    + [getFieldNode](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getFieldNode)
    + [getField](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getField)
    + [hashCode](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-hashCode)
    + [같음](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-class-defs-equals)
    + [DynamicRecord 객체](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-object)
      + [Apply](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-dynamicrecord-object-defs-apply)
    + [RecordTraverser 특성](glue-etl-scala-apis-glue-dynamicrecord-class.md#glue-etl-scala-apis-glue-recordtraverser-trait)
  + [GlueContext](glue-etl-scala-apis-glue-gluecontext.md)
    + [addIngestionTimeColumns](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-addIngestionTimeColumns)
    + [createDataFrameFromOptions](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-createDataFrameFromOptions)
    + [forEachBatch](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-forEachBatch)
    + [getCatalogSink](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSink)
    + [getCatalogSource](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSource)
    + [getJDBCSink](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getJDBCSink)
    + [getSink](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSink)
    + [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat)
    + [getSource](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSource)
    + [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat)
    + [getSparkSession](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSparkSession)
    + [startTransaction](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-start-transaction)
    + [commitTransaction](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-commit-transaction)
    + [cancelTransaction](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-cancel-transaction)
    + [this](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-this-1)
    + [this](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-this-2)
    + [this](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-this-3)
  + [MappingSpec](glue-etl-scala-apis-glue-mappingspec.md)
    + [MappingSpec 케이스 클래스](glue-etl-scala-apis-glue-mappingspec.md#glue-etl-scala-apis-glue-mappingspec-case-class)
    + [MappingSpec 객체](glue-etl-scala-apis-glue-mappingspec.md#glue-etl-scala-apis-glue-mappingspec-object)
    + [orderingByTarget](glue-etl-scala-apis-glue-mappingspec.md#glue-etl-scala-apis-glue-mappingspec-object-val-orderingbytarget)
    + [Apply](glue-etl-scala-apis-glue-mappingspec.md#glue-etl-scala-apis-glue-mappingspec-object-defs-apply-1)
    + [Apply](glue-etl-scala-apis-glue-mappingspec.md#glue-etl-scala-apis-glue-mappingspec-object-defs-apply-2)
    + [Apply](glue-etl-scala-apis-glue-mappingspec.md#glue-etl-scala-apis-glue-mappingspec-object-defs-apply-3)
  + [ResolveSpec](glue-etl-scala-apis-glue-resolvespec.md)
    + [ResolveSpec 객체](glue-etl-scala-apis-glue-resolvespec.md#glue-etl-scala-apis-glue-resolvespec-object)
      + [def](glue-etl-scala-apis-glue-resolvespec.md#glue-etl-scala-apis-glue-resolvespec-object-def-apply_1)
      + [def](glue-etl-scala-apis-glue-resolvespec.md#glue-etl-scala-apis-glue-resolvespec-object-def-apply_2)
    + [ResolveSpec 케이스 클래스](glue-etl-scala-apis-glue-resolvespec.md#glue-etl-scala-apis-glue-resolvespec-case-class)
      + [def 메서드](glue-etl-scala-apis-glue-resolvespec.md#glue-etl-scala-apis-glue-resolvespec-case-class-defs)
  + [ArrayNode](glue-etl-scala-apis-glue-types-arraynode.md)
    + [ArrayNode 케이스 클래스](glue-etl-scala-apis-glue-types-arraynode.md#glue-etl-scala-apis-glue-types-arraynode-case-class)
      + [정의 메서드](glue-etl-scala-apis-glue-types-arraynode.md#glue-etl-scala-apis-glue-types-arraynode-case-class-defs)
  + [BinaryNode](glue-etl-scala-apis-glue-types-binarynode.md)
    + [BinaryNode 케이스 클래스](glue-etl-scala-apis-glue-types-binarynode.md#glue-etl-scala-apis-glue-types-binarynode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-binarynode.md#glue-etl-scala-apis-glue-types-binarynode-case-class-vals)
      + [정의 메서드](glue-etl-scala-apis-glue-types-binarynode.md#glue-etl-scala-apis-glue-types-binarynode-case-class-defs)
  + [BooleanNode](glue-etl-scala-apis-glue-types-booleannode.md)
    + [BooleanNode 케이스 클래스](glue-etl-scala-apis-glue-types-booleannode.md#glue-etl-scala-apis-glue-types-booleannode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-booleannode.md#glue-etl-scala-apis-glue-types-booleannode-case-class-vals)
      + [정의 메서드](glue-etl-scala-apis-glue-types-booleannode.md#glue-etl-scala-apis-glue-types-booleannode-case-class-defs)
  + [ByteNode](glue-etl-scala-apis-glue-types-bytenode.md)
    + [ByteNode 케이스 클래스](glue-etl-scala-apis-glue-types-bytenode.md#glue-etl-scala-apis-glue-types-bytenode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-bytenode.md#glue-etl-scala-apis-glue-types-bytenode-case-class-vals)
      + [정의 메서드](glue-etl-scala-apis-glue-types-bytenode.md#glue-etl-scala-apis-glue-types-bytenode-case-class-defs)
  + [DateNode](glue-etl-scala-apis-glue-types-datenode.md)
    + [DateNode 케이스 클래스](glue-etl-scala-apis-glue-types-datenode.md#glue-etl-scala-apis-glue-types-datenode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-datenode.md#glue-etl-scala-apis-glue-types-datenode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-datenode.md#glue-etl-scala-apis-glue-types-datenode-case-class-defs)
  + [DecimalNode](glue-etl-scala-apis-glue-types-decimalnode.md)
    + [DecimalNode 케이스 클래스](glue-etl-scala-apis-glue-types-decimalnode.md#glue-etl-scala-apis-glue-types-decimalnode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-decimalnode.md#glue-etl-scala-apis-glue-types-decimalnode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-decimalnode.md#glue-etl-scala-apis-glue-types-decimalnode-case-class-defs)
  + [DoubleNode](glue-etl-scala-apis-glue-types-doublenode.md)
    + [DoubleNode 케이스 클래스](glue-etl-scala-apis-glue-types-doublenode.md#glue-etl-scala-apis-glue-types-doublenode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-doublenode.md#glue-etl-scala-apis-glue-types-doublenode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-doublenode.md#glue-etl-scala-apis-glue-types-doublenode-case-class-defs)
  + [DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md)
    + [DynamicNode 클래스](glue-etl-scala-apis-glue-types-dynamicnode.md#glue-etl-scala-apis-glue-types-dynamicnode-class)
      + [def 메서드](glue-etl-scala-apis-glue-types-dynamicnode.md#glue-etl-scala-apis-glue-types-dynamicnode-class-defs)
    + [DynamicNode 객체](glue-etl-scala-apis-glue-types-dynamicnode.md#glue-etl-scala-apis-glue-types-dynamicnode-object)
      + [def 메서드](glue-etl-scala-apis-glue-types-dynamicnode.md#glue-etl-scala-apis-glue-types-dynamicnode-object-defs)
  + [EvaluateDataQuality](glue-etl-scala-apis-glue-dq-EvaluateDataQuality.md)
    + [apply](glue-etl-scala-apis-glue-dq-EvaluateDataQuality.md#glue-etl-scala-apis-glue-dq-EvaluateDataQuality-defs-apply)
    + [예시](glue-etl-scala-apis-glue-dq-EvaluateDataQuality.md#glue-etl-scala-apis-glue-dq-EvaluateDataQuality-example)
  + [FloatNode](glue-etl-scala-apis-glue-types-floatnode.md)
    + [FloatNode 케이스 클래스](glue-etl-scala-apis-glue-types-floatnode.md#glue-etl-scala-apis-glue-types-floatnode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-floatnode.md#glue-etl-scala-apis-glue-types-floatnode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-floatnode.md#glue-etl-scala-apis-glue-types-floatnode-case-class-defs)
  + [FillMissingValues](glue-etl-scala-apis-glue-ml-fillmissingvalues.md)
    + [Apply](glue-etl-scala-apis-glue-ml-fillmissingvalues.md#glue-etl-scala-apis-glue-ml-fillmissingvalues-defs-apply)
  + [FindMatches](glue-etl-scala-apis-glue-ml-findmatches.md)
    + [Apply](glue-etl-scala-apis-glue-ml-findmatches.md#glue-etl-scala-apis-glue-ml-findmatches-defs-apply)
  + [FindIncrementalMatches](glue-etl-scala-apis-glue-ml-findincrementalmatches.md)
    + [Apply](glue-etl-scala-apis-glue-ml-findincrementalmatches.md#glue-etl-scala-apis-glue-ml-findincrementalmatches-defs-apply)
  + [IntegerNode](glue-etl-scala-apis-glue-types-integernode.md)
    + [IntegerNode 케이스 클래스](glue-etl-scala-apis-glue-types-integernode.md#glue-etl-scala-apis-glue-types-integernode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-integernode.md#glue-etl-scala-apis-glue-types-integernode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-integernode.md#glue-etl-scala-apis-glue-types-integernode-case-class-defs)
  + [LongNode](glue-etl-scala-apis-glue-types-longnode.md)
    + [LongNode 케이스 클래스](glue-etl-scala-apis-glue-types-longnode.md#glue-etl-scala-apis-glue-types-longnode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-longnode.md#glue-etl-scala-apis-glue-types-longnode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-longnode.md#glue-etl-scala-apis-glue-types-longnode-case-class-defs)
  + [MapLikeNode](glue-etl-scala-apis-glue-types-maplikenode.md)
    + [MapLikeNode 클래스](glue-etl-scala-apis-glue-types-maplikenode.md#glue-etl-scala-apis-glue-types-maplikenode-class)
      + [def 메서드](glue-etl-scala-apis-glue-types-maplikenode.md#glue-etl-scala-apis-glue-types-maplikenode-class-defs)
  + [MapNode](glue-etl-scala-apis-glue-types-mapnode.md)
    + [MapNode 케이스 클래스](glue-etl-scala-apis-glue-types-mapnode.md#glue-etl-scala-apis-glue-types-mapnode-case-class)
      + [def 메서드](glue-etl-scala-apis-glue-types-mapnode.md#glue-etl-scala-apis-glue-types-mapnode-case-class-defs)
  + [NullNode](glue-etl-scala-apis-glue-types-nullnode.md)
    + [NullNode 클래스](glue-etl-scala-apis-glue-types-nullnode.md#glue-etl-scala-apis-glue-types-nullnode-class)
    + [NullNode 케이스 객체](glue-etl-scala-apis-glue-types-nullnode.md#glue-etl-scala-apis-glue-types-nullnode-case-object)
  + [ObjectNode](glue-etl-scala-apis-glue-types-objectnode.md)
    + [ObjectNode 객체](glue-etl-scala-apis-glue-types-objectnode.md#glue-etl-scala-apis-glue-types-objectnode-object)
      + [def 메서드](glue-etl-scala-apis-glue-types-objectnode.md#glue-etl-scala-apis-glue-types-objectnode-object-defs)
    + [ObjectNode 케이스 클래스](glue-etl-scala-apis-glue-types-objectnode.md#glue-etl-scala-apis-glue-types-objectnode-case-class)
      + [def 메서드](glue-etl-scala-apis-glue-types-objectnode.md#glue-etl-scala-apis-glue-types-objectnode-case-class-defs)
  + [ScalarNode](glue-etl-scala-apis-glue-types-scalarnode.md)
    + [ScalarNode 클래스](glue-etl-scala-apis-glue-types-scalarnode.md#glue-etl-scala-apis-glue-types-scalarnode-class)
      + [def 메서드](glue-etl-scala-apis-glue-types-scalarnode.md#glue-etl-scala-apis-glue-types-scalarnode-class-defs)
    + [ScalarNode 객체](glue-etl-scala-apis-glue-types-scalarnode.md#glue-etl-scala-apis-glue-types-scalarnode-object)
      + [def 메서드](glue-etl-scala-apis-glue-types-scalarnode.md#glue-etl-scala-apis-glue-types-scalarnode-object-defs)
  + [ShortNode](glue-etl-scala-apis-glue-types-shortnode.md)
    + [ShortNode 케이스 클래스](glue-etl-scala-apis-glue-types-shortnode.md#glue-etl-scala-apis-glue-types-shortnode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-shortnode.md#glue-etl-scala-apis-glue-types-shortnode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-shortnode.md#glue-etl-scala-apis-glue-types-shortnode-case-class-defs)
  + [StringNode](glue-etl-scala-apis-glue-types-stringnode.md)
    + [StringNode 케이스 클래스](glue-etl-scala-apis-glue-types-stringnode.md#glue-etl-scala-apis-glue-types-stringnode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-stringnode.md#glue-etl-scala-apis-glue-types-stringnode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-stringnode.md#glue-etl-scala-apis-glue-types-stringnode-case-class-defs)
  + [TimestampNode](glue-etl-scala-apis-glue-types-timestampnode.md)
    + [TimestampNode 케이스 클래스](glue-etl-scala-apis-glue-types-timestampnode.md#glue-etl-scala-apis-glue-types-timestampnode-case-class)
      + [val 필드](glue-etl-scala-apis-glue-types-timestampnode.md#glue-etl-scala-apis-glue-types-timestampnode-case-class-vals)
      + [def 메서드](glue-etl-scala-apis-glue-types-timestampnode.md#glue-etl-scala-apis-glue-types-timestampnode-case-class-defs)
  + [GlueArgParser](glue-etl-scala-apis-glue-util-glueargparser.md)
    + [GlueArgParser 객체](glue-etl-scala-apis-glue-util-glueargparser.md#glue-etl-scala-apis-glue-util-glueargparser-object)
      + [def 메서드](glue-etl-scala-apis-glue-util-glueargparser.md#glue-etl-scala-apis-glue-util-glueargparser-object-defs)
  + [작업](glue-etl-scala-apis-glue-util-job.md)
    + [작업 객체](glue-etl-scala-apis-glue-util-job.md#glue-etl-scala-apis-glue-util-job-object)
      + [def 메서드](glue-etl-scala-apis-glue-util-job.md#glue-etl-scala-apis-glue-util-job-object-defs)

# Scala 사용하여 AWS Glue ETL 스크립트 프로그래밍
<a name="glue-etl-scala-using"></a>

AWS Glue 콘솔을 사용하여 Scala ETL(extract, transform, load: 추출, 변환, 로드) 프로그램을 자동으로 생성하고, 필요에 따라 수정한 후 작업에 할당할 수 있습니다. 또는 처음부터 자체 프로그램을 작성할 수 있습니다. 자세한 내용은 [AWS Glue에서 Spark 작업에 대한 작업 속성 구성](add-job.md)를 참조하십시오. 그런 다음 AWS Glue는 관련 작업을 실행하기 전에 Scala 프로그램을 서버에 포함합니다.

프로그램이 오류없이 포함되고 예상대로 실행되는지 확인합니다. 이런 과정은 읽기, 평가, 출력 루프(REPL) 혹은 Jupyter Notebook의 개발 엔드포인트에서 프로그램을 로드하고 작업에서 실행하기 전에 프로그램을 테스트할 때 중요합니다. 서버에서 포함하는 과정이 발생하기 때문에 여기에서 진행되는 어떠한 문제도 눈으로 볼 수 없습니다.

## Scala ETL 프로그램을 개발 엔드포인트의 Jupyter Notebook에서 테스트
<a name="aws-glue-programming-scala-using-notebook"></a>

AWS Glue 개발 엔드포인트에서 Scala 프로그램을 테스트하려면 [개발 엔드포인트 추가](add-dev-endpoint.md)에 나오는 설명대로 개발 엔드포인트를 설정합니다.

그런 다음, 사용자의 시스템에서 로컬로 실행되거나 Amazon EC2 노트북 서버에서 원격으로 실행되는 Jupyter Notebook에 연결합니다. [자습서: JupyterLab의 Jupyter Notebook](dev-endpoint-tutorial-local-jupyter.md)의 지시에 따라 Jupyter Notebook의 로컬 버전을 설치합니다.

노트북의 Scala 코드를 실행하는 것과 PySpark 코드를 실행하는 것의 단 한 가지 차이는 다음을 통해 Notebook의 각 단락을 시작해야 합니다.

```
%spark
```

이런 과정은 노트북 서버가 Spark 인터프리터의 PySpark에 맞게 초기화되는 것을 방지합니다.

## Scala REPL에서 Scala ETL 프로그램 테스트
<a name="aws-glue-programming-scala-using-repl"></a>

AWS Glue Scala REPL을 사용하여 개발 엔드포인트의 Scala 프로그램을 테스트할 수 있습니다. [자습서: SageMaker AI 노트북 사용자습서: REPL 셸 사용](dev-endpoint-tutorial-repl.md) 지침에 따라 SSH-to-REPL 명령 끝부분을 제외하고 `-t gluepyspark`를 `-t glue-spark-shell`로 바꿉니다. 그러면 AWS Glue Scala REPL이 호출됩니다.

완료되면 REPL을 닫아서 `sys.exit`을 입력합니다.

# Scala 스크립트 예 - 스트리밍 ETL
<a name="glue-etl-scala-example"></a>

**Example**  
다음 예제 스크립트는 Amazon Kinesis Data Streams에 연결하고 Data Catalog의 스키마를 사용하여 데이터 스트림을 구문 분석하고, Amazon S3의 정적 데이터 집합에 스트림을 조인하고, 조인된 결과를 parquet 포맷의 Amazon S3에 출력합니다.  

```
// This script connects to an Amazon Kinesis stream, uses a schema from the data catalog to parse the stream,
// joins the stream to a static dataset on Amazon S3, and outputs the joined results to Amazon S3 in parquet format.
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import java.util.Calendar
import org.apache.spark.SparkContext
import org.apache.spark.sql.Dataset
import org.apache.spark.sql.Row
import org.apache.spark.sql.SaveMode
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.from_json
import org.apache.spark.sql.streaming.Trigger
import scala.collection.JavaConverters._

object streamJoiner {
  def main(sysArgs: Array[String]) {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val sparkSession: SparkSession = glueContext.getSparkSession
    import sparkSession.implicits._
    // @params: [JOB_NAME]
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)

    val staticData = sparkSession.read          // read() returns type DataFrameReader
      .format("csv")
      .option("header", "true")
      .load("s3://amzn-s3-demo-bucket/inputs/productsStatic.csv")  // load() returns a DataFrame

    val datasource0 = sparkSession.readStream   // readstream() returns type DataStreamReader
      .format("kinesis")
      .option("streamName", "stream-join-demo")
      .option("endpointUrl", "https://kinesis.us-east-1.amazonaws.com")
      .option("startingPosition", "TRIM_HORIZON")
      .load                                     // load() returns a DataFrame

    val selectfields1 = datasource0.select(from_json($"data".cast("string"), glueContext.getCatalogSchemaAsSparkSchema("stream-demos", "stream-join-demo2")) as "data").select("data.*")

    val datasink2 = selectfields1.writeStream.foreachBatch { (dataFrame: Dataset[Row], batchId: Long) => {   //foreachBatch() returns type DataStreamWriter
      val joined = dataFrame.join(staticData, "product_id")
      val year: Int = Calendar.getInstance().get(Calendar.YEAR)
      val month :Int = Calendar.getInstance().get(Calendar.MONTH) + 1
      val day: Int = Calendar.getInstance().get(Calendar.DATE)
      val hour: Int = Calendar.getInstance().get(Calendar.HOUR_OF_DAY)

      if (dataFrame.count() > 0) {
        joined.write                           // joined.write returns type DataFrameWriter
          .mode(SaveMode.Append)
          .format("parquet")
          .option("quote", " ")
          .save("s3://amzn-s3-demo-bucket/output/" + "/year=" + "%04d".format(year) + "/month=" + "%02d".format(month) + "/day=" + "%02d".format(day) + "/hour=" + "%02d".format(hour) + "/")
      }
    }
    }  // end foreachBatch()
      .trigger(Trigger.ProcessingTime("100 seconds"))
      .option("checkpointLocation", "s3://amzn-s3-demo-bucket/checkpoint/")
      .start().awaitTermination()              // start() returns type StreamingQuery
    Job.commit()
  }
}
```

# AWS Glue Scala 라이브러리의 API
<a name="glue-etl-scala-apis"></a>

AWS Glue는 추출, 변환 및 로드(ETL) 작업 스크립트의 PySpark Scala의 확장 언어를 지원합니다. 다음 단원에서는 AWS Glue Scala 라이브러리의 API를 설명합니다.

## com.amazonaws.services.glue
<a name="glue-etl-scala-apis-glue"></a>

AWS Glue Scala 라이브러리의 **com.amazonaws.services.glue** 패키지에는 다음 API가 포함되어 있습니다.
+ [ChoiceOption](glue-etl-scala-apis-glue-choiceoption.md)
+ [DataSink](glue-etl-scala-apis-glue-datasink-class.md)
+ [DataSource 특성](glue-etl-scala-apis-glue-datasource-trait.md)
+ [DynamicFrame](glue-etl-scala-apis-glue-dynamicframe.md)
+ [DynamicRecord](glue-etl-scala-apis-glue-dynamicrecord-class.md)
+ [GlueContext](glue-etl-scala-apis-glue-gluecontext.md)
+ [MappingSpec](glue-etl-scala-apis-glue-mappingspec.md)
+ [ResolveSpec](glue-etl-scala-apis-glue-resolvespec.md)

## com.amazonaws.services.glue.ml
<a name="glue-etl-scala-apis-glue-ml"></a>

AWS Glue Scala 라이브러리의 **com.amazonaws.services.glue.ml** 패키지에는 다음 API가 포함되어 있습니다.
+ [FillMissingValues](glue-etl-scala-apis-glue-ml-fillmissingvalues.md)
+ [FindIncrementalMatches](glue-etl-scala-apis-glue-ml-findincrementalmatches.md)
+ [FindMatches](glue-etl-scala-apis-glue-ml-findmatches.md)

## com.amazonaws.services.glue.dq
<a name="glue-etl-scala-apis-glue-dq"></a>

AWS Glue Scala 라이브러리의 **com.amazonaws.services.glue.dq** 패키지에는 다음 API가 포함되어 있습니다.
+ [EvaluateDataQuality](glue-etl-scala-apis-glue-dq-EvaluateDataQuality.md)

## com.amazonaws.services.glue.types
<a name="glue-etl-scala-apis-glue-types"></a>

AWS Glue Scala 라이브러리의 **com.amazonaws.services.glue.types** 패키지에는 다음 API가 포함되어 있습니다.
+ [ArrayNode](glue-etl-scala-apis-glue-types-arraynode.md)
+ [BinaryNode](glue-etl-scala-apis-glue-types-binarynode.md)
+ [BooleanNode](glue-etl-scala-apis-glue-types-booleannode.md)
+ [ByteNode](glue-etl-scala-apis-glue-types-bytenode.md)
+ [DateNode](glue-etl-scala-apis-glue-types-datenode.md)
+ [DecimalNode](glue-etl-scala-apis-glue-types-decimalnode.md)
+ [DoubleNode](glue-etl-scala-apis-glue-types-doublenode.md)
+ [DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md)
+ [FloatNode](glue-etl-scala-apis-glue-types-floatnode.md)
+ [IntegerNode](glue-etl-scala-apis-glue-types-integernode.md)
+ [LongNode](glue-etl-scala-apis-glue-types-longnode.md)
+ [MapLikeNode](glue-etl-scala-apis-glue-types-maplikenode.md)
+ [MapNode](glue-etl-scala-apis-glue-types-mapnode.md)
+ [NullNode](glue-etl-scala-apis-glue-types-nullnode.md)
+ [ObjectNode](glue-etl-scala-apis-glue-types-objectnode.md)
+ [ScalarNode](glue-etl-scala-apis-glue-types-scalarnode.md)
+ [ShortNode](glue-etl-scala-apis-glue-types-shortnode.md)
+ [StringNode](glue-etl-scala-apis-glue-types-stringnode.md)
+ [TimestampNode](glue-etl-scala-apis-glue-types-timestampnode.md)

## com.amazonaws.services.glue.util
<a name="glue-etl-scala-apis-glue-util"></a>

AWS Glue Scala 라이브러리의 **com.amazonaws.services.glue.util** 패키지에는 다음 API가 포함되어 있습니다.
+ [GlueArgParser](glue-etl-scala-apis-glue-util-glueargparser.md)
+ [작업](glue-etl-scala-apis-glue-util-job.md)

# AWS Glue Scala ChoiceOption API
<a name="glue-etl-scala-apis-glue-choiceoption"></a>

**Topics**
+ [ChoiceOption 특성](#glue-etl-scala-apis-glue-choiceoption-trait)
+ [ChoiceOption 객체](#glue-etl-scala-apis-glue-choiceoption-object)
+ [케이스 클래스 ChoiceOptionWithResolver](#glue-etl-scala-apis-glue-choiceoptionwithresolver-case-class)
+ [케이스 클래스 MatchCatalogSchemaChoiceOption](#glue-etl-scala-apis-glue-matchcatalogschemachoiceoption-case-class)

**패키지:   com.amazonaws.services.glue**

## ChoiceOption 특성
<a name="glue-etl-scala-apis-glue-choiceoption-trait"></a>

```
trait ChoiceOption extends Serializable 
```

## ChoiceOption 객체
<a name="glue-etl-scala-apis-glue-choiceoption-object"></a>

 **ChoiceOption**

```
object ChoiceOption
```

`DynamicFrame`의 모든 `ChoiceType` 노드에 적용 가능한 선택을 확인하기 위한 일반적인 전략입니다.
+ `val CAST`
+ `val MAKE_COLS`
+ `val MAKE_STRUCT`
+ `val MATCH_CATALOG`
+ `val PROJECT`

### 정의 적용
<a name="glue-etl-scala-apis-glue-choiceoption-object-def-apply"></a>

```
def apply(choice: String): ChoiceOption
```



## 케이스 클래스 ChoiceOptionWithResolver
<a name="glue-etl-scala-apis-glue-choiceoptionwithresolver-case-class"></a>

```
case class ChoiceOptionWithResolver(name: String, choiceResolver: ChoiceResolver) extends ChoiceOption {}
```



## 케이스 클래스 MatchCatalogSchemaChoiceOption
<a name="glue-etl-scala-apis-glue-matchcatalogschemachoiceoption-case-class"></a>

```
case class MatchCatalogSchemaChoiceOption() extends ChoiceOption {}
```



# 추상 DataSink 클래스
<a name="glue-etl-scala-apis-glue-datasink-class"></a>

**Topics**
+ [writeDynamicFrame 정의](#glue-etl-scala-apis-glue-datasink-class-defs-writeDynamicFrame)
+ [pyWriteDynamicFrame 정의](#glue-etl-scala-apis-glue-datasink-class-defs-pyWriteDynamicFrame)
+ [Def writeDataFrame](#glue-etl-scala-apis-glue-datasink-class-defs-writeDataFrame)
+ [Def pyWriteDataFrame](#glue-etl-scala-apis-glue-datasink-class-defs-pyWriteDataFrame)
+ [setCatalogInfo 정의](#glue-etl-scala-apis-glue-datasink-class-defs-setCatalogInfo)
+ [supportsFormat 정의](#glue-etl-scala-apis-glue-datasink-class-defs-supportsFormat)
+ [setFormat 정의](#glue-etl-scala-apis-glue-datasink-class-defs-setFormat)
+ [withFormat 정의](#glue-etl-scala-apis-glue-datasink-class-defs-withFormat)
+ [setAccumulableSize 정의](#glue-etl-scala-apis-glue-datasink-class-defs-setAccumulableSize)
+ [getOutputErrorRecordsAccumulable 정의](#glue-etl-scala-apis-glue-datasink-class-defs-getOutputErrorRecordsAccumulable)
+ [errorsAsDynamicFrame 정의](#glue-etl-scala-apis-glue-datasink-class-defs-errorsAsDynamicFrame)
+ [DataSink 객체](#glue-etl-scala-apis-glue-datasink-object)

**패키지:   com.amazonaws.services.glue**

```
abstract class DataSink
```

`DataSource`에 대한 쓰기 아날로그. `DataSink`는 `DynamicFrame`이 기록될 수 있는 대상과 형식을 요약합니다.

## writeDynamicFrame 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-writeDynamicFrame"></a>

```
def writeDynamicFrame( frame : DynamicFrame,
                       callSite : CallSite = CallSite("Not provided", "")
                     ) : DynamicFrame
```



## pyWriteDynamicFrame 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-pyWriteDynamicFrame"></a>

```
def pyWriteDynamicFrame( frame : DynamicFrame,
                         site : String = "Not provided",
                         info : String = "" )
```



## Def writeDataFrame
<a name="glue-etl-scala-apis-glue-datasink-class-defs-writeDataFrame"></a>

```
def writeDataFrame(frame: DataFrame,
                   glueContext: GlueContext,
                   callSite: CallSite = CallSite("Not provided", "")
                   ): DataFrame
```



## Def pyWriteDataFrame
<a name="glue-etl-scala-apis-glue-datasink-class-defs-pyWriteDataFrame"></a>

```
def pyWriteDataFrame(frame: DataFrame,
                     glueContext: GlueContext,
                     site: String = "Not provided",
                     info: String = ""
                     ): DataFrame
```



## setCatalogInfo 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-setCatalogInfo"></a>

```
def setCatalogInfo(catalogDatabase: String, 
                   catalogTableName : String, 
                   catalogId : String = "")
```



## supportsFormat 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-supportsFormat"></a>

```
def supportsFormat( format : String ) : Boolean
```



## setFormat 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-setFormat"></a>

```
def setFormat( format : String,
               options : JsonOptions
             ) : Unit
```



## withFormat 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-withFormat"></a>

```
def withFormat( format : String,
                options : JsonOptions = JsonOptions.empty
              ) : DataSink
```



## setAccumulableSize 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-setAccumulableSize"></a>

```
def setAccumulableSize( size : Int ) : Unit
```



## getOutputErrorRecordsAccumulable 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-getOutputErrorRecordsAccumulable"></a>

```
def getOutputErrorRecordsAccumulable : Accumulable[List[OutputError], OutputError]
```



## errorsAsDynamicFrame 정의
<a name="glue-etl-scala-apis-glue-datasink-class-defs-errorsAsDynamicFrame"></a>

```
def errorsAsDynamicFrame : DynamicFrame
```



## DataSink 객체
<a name="glue-etl-scala-apis-glue-datasink-object"></a>

```
object DataSink
```

### recordMetrics 정의
<a name="glue-etl-scala-apis-glue-datasink-object-defs-recordMetrics"></a>

```
def recordMetrics( frame : DynamicFrame,
                   ctxt : String
                 ) : DynamicFrame
```



# AWS Glue Scala DataSource 특성
<a name="glue-etl-scala-apis-glue-datasource-trait"></a>

**패키지:   com.amazonaws.services.glue**

`DynamicFrame`을 생산하는데 필요한 높은 수준의 인터페이스입니다.

```
trait DataSource {

  def getDynamicFrame : DynamicFrame 

  def getDynamicFrame( minPartitions : Int,
                       targetPartitions : Int
                     ) : DynamicFrame 
  def getDataFrame : DataFrame
					 
  /** @param num: the number of records for sampling.
    * @param options: optional parameters to control sampling behavior. Current available parameter for Amazon S3 sources in options:
    *  1. maxSamplePartitions: the maximum number of partitions the sampling will read. 
    *  2. maxSampleFilesPerPartition: the maximum number of files the sampling will read in one partition.
    */
  def getSampleDynamicFrame(num:Int, options: JsonOptions = JsonOptions.empty): DynamicFrame 

  def glueContext : GlueContext

  def setFormat( format : String,
                 options : String
               ) : Unit 

  def setFormat( format : String,
                 options : JsonOptions
               ) : Unit

  def supportsFormat( format : String ) : Boolean

  def withFormat( format : String,
                  options : JsonOptions = JsonOptions.empty
                ) : DataSource 
}
```

# AWS Glue Scala DynamicFrame API
<a name="glue-etl-scala-apis-glue-dynamicframe"></a>

**패키지:   com.amazonaws.services.glue**

**Contents**
+ [AWS Glue Scala DynamicFrame 클래스](glue-etl-scala-apis-glue-dynamicframe-class.md)
  + [val errorsCount](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-vals-errorsCount)
  + [def applyMapping](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-applyMapping)
  + [def assertErrorThreshold](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-assertErrorThreshold)
  + [def count](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-count)
  + [def dropField](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-dropField)
  + [def dropFields](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-dropFields)
  + [def dropNulls](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-dropNulls)
  + [def errorsAsDynamicFrame](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-errorsAsDynamicFrame)
  + [def filter](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-filter)
  + [def getName](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-getName)
  + [def getNumPartitions](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-getNumPartitions)
  + [def getSchemaIfComputed](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-getSchemaIfComputed)
  + [def isSchemaComputed](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-isSchemaComputed)
  + [def javaToPython](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-javaToPython)
  + [def join](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-join)
  + [def map](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-map)
  + [def mergeDynamicFrames](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-merge)
  + [def printSchema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-printSchema)
  + [def recomputeSchema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-recomputeSchema)
  + [def relationalize](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-relationalize)
  + [def renameField](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-renameField)
  + [def repartition](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-repartition)
  + [def resolveChoice](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-resolveChoice)
  + [def schema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-schema)
  + [def selectField](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-selectField)
  + [def selectFields](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-selectFields)
  + [def show](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-show)
  + [Def simplifyDDBJson](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-simplifyDDBJson)
  + [def spigot](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-spigot)
  + [def splitFields](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-splitFields)
  + [def splitRows](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-splitRows)
  + [def stageErrorsCount](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-stageErrorsCount)
  + [def toDF](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-toDF)
  + [def unbox](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-unbox)
  + [def unnest](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-unnest)
  + [def unnestDDBJson](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-unnestddbjson)
  + [def withFrameSchema](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-withFrameSchema)
  + [def withName](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-withName)
  + [def withTransformationContext](glue-etl-scala-apis-glue-dynamicframe-class.md#glue-etl-scala-apis-glue-dynamicframe-class-defs-withTransformationContext)
+ [DynamicFrame 객체](glue-etl-scala-apis-glue-dynamicframe-object.md)
  + [def apply](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-apply)
  + [def emptyDynamicFrame](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-emptyDynamicFrame)
  + [def fromPythonRDD](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-fromPythonRDD)
  + [def ignoreErrors](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-ignoreErrors)
  + [def inlineErrors](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-inlineErrors)
  + [def newFrameWithErrors](glue-etl-scala-apis-glue-dynamicframe-object.md#glue-etl-scala-apis-glue-dynamicframe-object-defs-newFrameWithErrors)

# AWS Glue Scala DynamicFrame 클래스
<a name="glue-etl-scala-apis-glue-dynamicframe-class"></a>

**패키지:   com.amazonaws.services.glue**

```
class DynamicFrame extends Serializable with Logging  (
           val glueContext : GlueContext,
           _records : RDD[DynamicRecord],
           val name : String = s"",
           val transformationContext : String = DynamicFrame.UNDEFINED,
           callSite : CallSite = CallSite("Not provided", ""),
           stageThreshold : Long = 0,
           totalThreshold : Long = 0,
           prevErrors : => Long = 0,
           errorExpr : => Unit = {} )
```

`DynamicFrame`은 자기 기술형 [DynamicRecord](glue-etl-scala-apis-glue-dynamicrecord-class.md) 객체의 분산형 모음입니다.

`DynamicFrame`은 ETL(extract, transform, load) 작업에 유연한 데이터 모델을 제공할 수 있게끔 설계되어 있습니다. 스키마를 생성할 필요가 없고, 복잡하거나 일관되지 않은 값과 유형을 가진 데이터를 읽고 변환할 때 사용할 수 있습니다. 스키마가 필요한 작업에만 '온 디맨드(필요에 따라)'로 스키마를 계산할 수 있습니다.

`DynamicFrame`은 데이터 정리 및 ETL에 필요한 다양한 변환을 지원합니다. 또한 DataFrame이 제공하는 많은 분석 작업과 기존 코드를 통합할 수 있도록 SparkSQL DataFrame 변환을 지원합니다.

다음 파라미터는 `DynamicFrame`을 구성하는 수많은 AWS Glue 변환에서 공유됩니다.
+ `transformationContext` - 이 `DynamicFrame`의 식별자입니다. `transformationContext`는 실행 간 지속되는 작업 북마크 상태에 대한 키로 사용됩니다.
+ `callSite` - 오류 보고에 필요한 컨텍스트 정보를 제공합니다. Python에서 호출 할 때 자동으로 이 값이 설정됩니다.
+ `stageThreshold` - 예외가 발생하기 전에 이 `DynamicFrame` 계산에 허용되는 오류 레코드의 최대 개수입니다(이전 `DynamicFrame`에 존재하는 레코드 제외).
+ `totalThreshold` - 예외가 발생하기 전 전체 오류 레코드의 최대 개수입니다(이전 프레임의 레코드 포함).

## val errorsCount
<a name="glue-etl-scala-apis-glue-dynamicframe-class-vals-errorsCount"></a>

```
val errorsCount
```

이 `DynamicFrame`의 오류 레코드 개수입니다. 여기에는 이전 작업의 오류가 포함됩니다.

## def applyMapping
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-applyMapping"></a>

```
def applyMapping( mappings : Seq[Product4[String, String, String, String]],
                  caseSensitive : Boolean = true,
                  transformationContext : String = "",
                  callSite : CallSite = CallSite("Not provided", ""),
                  stageThreshold : Long = 0,
                  totalThreshold : Long = 0
                ) : DynamicFrame
```
+ `mappings` - 새 `DynamicFrame`을 구성하는 매핑 시퀀스입니다.
+ `caseSensitive` - 소스 열을 대소문자를 구분해서 처리할지 여부입니다. 이것을 false로 설정하면 AWS Glue Data Catalog 같이 대/소문자를 구분하지 않는 스토어 통합에 도움이 됩니다.

매핑 시퀀스에 따라 열을 선택, 프로젝트, 캐스트 합니다.

각 매핑은 소스 열과 유형 및 대상 열과 유형으로 구성되어 있습니다. 매핑을 4개 튜플(`source_path`, `source_type`,` target_path`, `target_type`) 또는 동일한 정보가 있는 [MappingSpec](glue-etl-scala-apis-glue-mappingspec.md) 객체로 지정할 수 있습니다.

간단한 프로젝션과 캐스팅에 매핑을 사용하는 것 외에 '`.`'(마침표)가 있는 경로의 구성 요소를 분리해 필드를 중첩하거나 중첩을 해제할 때도 매핑을 사용할 수 있습니다.

예를 들어 `DynamicFrame`에 다음 스키마가 있다고 가정해보겠습니다.

```
 {{{
   root
   |-- name: string
   |-- age: int
   |-- address: struct
   |    |-- state: string
   |    |-- zip: int
 }}}
```

다음 호출을 통해 `state` 및 `zip` 필드의 중첩을 해제할 수 있습니다.

```
 {{{
   df.applyMapping(
    Seq(("name", "string", "name", "string"),
        ("age", "int", "age", "int"),
        ("address.state", "string", "state", "string"),
        ("address.zip", "int", "zip", "int")))
 }}}
```

결과 스키마는 다음과 같습니다.

```
 {{{
   root
   |-- name: string
   |-- age: int
   |-- state: string
   |-- zip: int
 }}}
```

또한 `applyMapping`을 사용하여 열을 다시 중첩시킬 수 있습니다. 예를 들어 다음은 이전 변환을 반전시킨 다음에 대상에 `address`라는 이름의 구조체를 생성합니다.

```
 {{{
   df.applyMapping(
    Seq(("name", "string", "name", "string"),
        ("age", "int", "age", "int"),
        ("state", "string", "address.state", "string"),
        ("zip", "int", "address.zip", "int")))
 }}}
```

'`.`'(마침표) 문자가 있는 필드 이름은 백틱(````)을 인용 부호로 사용할 수 있습니다.

**참고**  
현재는 `applyMapping` 방법을 사용하여 어레이 아래에 중첩된 열을 매핑할 수 없습니다.

## def assertErrorThreshold
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-assertErrorThreshold"></a>

```
def assertErrorThreshold : Unit
```

계산을 강제 실행하고 오류 레코드의 개수가 `stageThreshold` 및 `totalThreshold` 미만인지 확인하는 작업입니다. 두 조건 중 하나가 충족되지 않는 경우 예외가 발생합니다.

## def count
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-count"></a>

```
lazy
def count
```

이 `DynamicFrame`의 요소 개수를 반환합니다.

## def dropField
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-dropField"></a>

```
def dropField( path : String,
               transformationContext : String = "",
               callSite : CallSite = CallSite("Not provided", ""),
               stageThreshold : Long = 0,
               totalThreshold : Long = 0
             ) : DynamicFrame
```

지정한 열이 제거된 새 `DynamicFrame`을 반환합니다.

## def dropFields
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-dropFields"></a>

```
def dropFields( fieldNames : Seq[String],   // The column names to drop.
                transformationContext : String = "",
                callSite : CallSite = CallSite("Not provided", ""),
                stageThreshold : Long = 0,
                totalThreshold : Long = 0
              ) : DynamicFrame
```

지정한 열이 제거된 새 `DynamicFrame`을 반환합니다.

이 방법을 사용하여 어레이 내부의 열을 포함해 중첩된 열을 삭제할 수 있지만, 지정 어레이 요소를 없앨 수는 없습니다.

## def dropNulls
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-dropNulls"></a>

```
def dropNulls( transformationContext : String = "",
               callSite : CallSite = CallSite("Not provided", ""),
               stageThreshold : Long = 0,
               totalThreshold : Long = 0 )
```

null 열이 모두 제거된 새 `DynamicFrame`을 반환합니다.

**참고**  
`NullType` 유형의 열만 제거합니다. 다른 열의 개별 null 값은 제거되거나 수정되지 않습니다.

## def errorsAsDynamicFrame
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-errorsAsDynamicFrame"></a>

```
def errorsAsDynamicFrame
```

이 `DynamicFrame`의 오류 레코드를 포함하는 새 `DynamicFrame`을 반환합니다.

## def filter
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-filter"></a>

```
def filter( f : DynamicRecord => Boolean,
            errorMsg : String = "",
            transformationContext : String = "",
            callSite : CallSite = CallSite("Not provided"),
            stageThreshold : Long = 0,
            totalThreshold : Long = 0
          ) : DynamicFrame
```

함수 '`f`'이 `true`를 반환하는 레코드만 포함하는 새로운 `DynamicFrame`을 생성합니다. 필터 함수 '`f`'는 입력 레코드를 바꾸지 않습니다.

## def getName
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-getName"></a>

```
def getName : String 
```

이 `DynamicFrame`의 이름을 반환합니다.

## def getNumPartitions
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-getNumPartitions"></a>

```
def getNumPartitions
```

이 `DynamicFrame`의 파티션 개수를 반환합니다.

## def getSchemaIfComputed
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-getSchemaIfComputed"></a>

```
def getSchemaIfComputed : Option[Schema] 
```

계산이 완료된 스키마를 반환합니다. 스키마 계산이 완료되지 않은 경우 데이터를 스캔하지 않습니다.

## def isSchemaComputed
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-isSchemaComputed"></a>

```
def isSchemaComputed : Boolean 
```

이 `DynamicFrame`에 대해 스키마가 계산되었으면 `true`를 반환하고 그렇지 않으면 `false`를 반환합니다. 이 방법이 false를 반환할 경우 `schema` 방법을 호출하려면 이 `DynamicFrame`의 레코드를 한 번 더 전달해야 합니다.

## def javaToPython
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-javaToPython"></a>

```
def javaToPython : JavaRDD[Array[Byte]] 
```



## def join
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-join"></a>

```
def join( keys1 : Seq[String],
          keys2 : Seq[String],
          frame2 : DynamicFrame,
          transformationContext : String = "",
          callSite : CallSite = CallSite("Not provided", ""),
          stageThreshold : Long = 0,
          totalThreshold : Long = 0
        ) : DynamicFrame
```
+ `keys1` - 이 `DynamicFrame`에서 조인에 사용할 수 있는 열입니다.
+ `keys2` - `frame2`에서 조인에 사용할 수 있는 열입니다. `keys1`과 길이가 같아야 합니다.
+ `frame2` - `DynamicFrame` 조인 기준입니다.

지정된 키를 사용하여 `frame2`로 동등 조인을 수행한 결과를 반환합니다.

## def map
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-map"></a>

```
def map( f : DynamicRecord => DynamicRecord,
         errorMsg : String = "",
         transformationContext : String = "",
         callSite : CallSite = CallSite("Not provided", ""),
         stageThreshold : Long = 0,
         totalThreshold : Long = 0
       ) : DynamicFrame
```

이 `DynamicFrame`의 각 레코드에 지정된 함수 '`f`'를 적용하여 생성된 새로운 `DynamicFrame`을 반환합니다.

이 방법은 레코드가 바뀌지 않도록 각 레코드를 복사한 후에 지정된 함수를 적용합니다. 매핑 함수가 특정 레코드에 대해 예외를 발생시킨 경우, 이 레코드를 오류로 표시하고 스택 트레이스를 오류 레코드의 열로 저장합니다.

## def mergeDynamicFrames
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-merge"></a>

```
def mergeDynamicFrames( stageDynamicFrame: DynamicFrame,  primaryKeys: Seq[String], transformationContext: String = "",
                         options: JsonOptions = JsonOptions.empty, callSite: CallSite = CallSite("Not provided"),
                         stageThreshold: Long = 0, totalThreshold: Long = 0): DynamicFrame
```
+ `stageDynamicFrame` - 병합할 스테이징 `DynamicFrame`입니다.
+ `primaryKeys` - 소스 및 스테이징 `DynamicFrame`의 레코드와 일치시킬 기본 키 필드 목록입니다.
+ `transformationContext` - 현재 변환에 대한 메타데이터를 검색하는 데 사용되는 고유한 문자열입니다(선택 사항).
+ `options` - 이 변환에 대한 추가 정보를 제공하는 JSON 이름-값 페어 문자열입니다.
+ `callSite` - 오류 보고에 필요한 컨텍스트 정보를 제공하는 데 사용합니다.
+ `stageThreshold` - `Long`입니다. 오류가 발생되는 지정된 변환의 오류 수입니다.
+ `totalThreshold` - `Long`입니다. 오류가 발생되는 이 변환의 총 오류 수입니다.

레코드를 식별하기 위해, 지정된 기본 키를 기반으로 이 `DynamicFrame`을 스테이징 `DynamicFrame`과 병합합니다. 중복 레코드(기본 키가 동일한 레코드)는 중복 제거되지 않습니다. 스테이징 프레임에 일치하는 레코드가 없으면 모든 레코드(중복 레코드 포함)가 소스에서 유지됩니다. 스테이징 프레임에 일치하는 레코드가 있으면 스테이징 프레임의 레코드가 AWS Glue의 소스에 있는 레코드를 덮어씁니다.

다음과 같은 경우 반환된 `DynamicFrame`에 레코드 A가 포함되어 있습니다.

1. `A`가 소스 프레임과 스테이징 프레임 모두에 있는 경우에는 스테이징 프레임의 `A`가 반환됩니다.

1. `A`가 소스 테이블에 있고 `A.primaryKeys`가 `stagingDynamicFrame`에 없는 경우에는 `A`는 스테이징 테이블에서 업데이트되지 않습니다.

소스 프레임과 스테이징 프레임이 동일한 스키마를 가질 필요는 없습니다.

**Example**  

```
val mergedFrame: DynamicFrame = srcFrame.mergeDynamicFrames(stageFrame, Seq("id1", "id2"))
```

## def printSchema
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-printSchema"></a>

```
def printSchema : Unit 
```

이 `DynamicFrame`의 스키마를 사람이 읽을 수 있는 형식의 `stdout`으로 인쇄합니다.

## def recomputeSchema
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-recomputeSchema"></a>

```
def recomputeSchema : Schema 
```

스키마 재계산을 강제 실행합니다. 이를 위해 데이터를 스캔해야 하지만, 현재 스키마의 일부 필드가 데이터에 존재하지 않는 경우에는 스키마를 줄여야 할 수도 있습니다.

재계산한 스키마를 반환합니다.

## def relationalize
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-relationalize"></a>

```
def relationalize( rootTableName : String,
                   stagingPath : String,
                   options : JsonOptions = JsonOptions.empty,
                   transformationContext : String = "",
                   callSite : CallSite = CallSite("Not provided"),
                   stageThreshold : Long = 0,
                   totalThreshold : Long = 0
                 ) : Seq[DynamicFrame]
```
+ `rootTableName` - 출력에서 기본 `DynamicFrame`에 사용하는 이름. 이를 접두사로 시작하는 어레이를 피벗하여 생성되는 `DynamicFrame`입니다.
+ `stagingPath` - 중간 데이터 쓰기를 위한 Amazon Simple Storage Service(Amazon S3) 경로입니다.
+ `options` - 관계화 옵션 및 구성입니다. 현재 사용되지 않습니다.

모든 중첩된 구조와 피벗 어레이를 별개 테이블로 평면화합니다.

이 작업을 사용하여 크게 중첩된 데이터를 관계형 데이터베이스가 처리하도록 준비할 수 있습니다. 중첩된 구조를 [unnest](#glue-etl-scala-apis-glue-dynamicframe-class-defs-unnest) 변환과 동일한 방식으로 평면화합니다. 여기에 더해, 어레이를 각 어레이 요소가 행이 되는 별개 테이블로 피벗합니다. 예를 들어 `DynamicFrame`에 다음 데이터가 있다고 가정해보겠습니다.

```
 {"name": "Nancy", "age": 47, "friends": ["Fred", "Lakshmi"]}
 {"name": "Stephanie", "age": 28, "friends": ["Yao", "Phil", "Alvin"]}
 {"name": "Nathan", "age": 54, "friends": ["Nicolai", "Karen"]}
```

다음 코드를 실행합니다.

```
{{{
  df.relationalize("people", "s3:/my_bucket/my_path", JsonOptions.empty)
}}}
```

그러면 두 개 테이블이 생성됩니다. 첫 번째 테이블 이름은 "people"이며, 다음이 포함되어 있습니다.

```
{{{
  {"name": "Nancy", "age": 47, "friends": 1}
  {"name": "Stephanie", "age": 28, "friends": 2}
  {"name": "Nathan", "age": 54, "friends": 3)
}}}
```

여기에서는 친구 어레이가 자동 생성된 조인 키로 교체되어 있습니다. 다음 내용이 포함된 `people.friends`라는 이름의 별개 테이블이 생성됩니다.

```
{{{
  {"id": 1, "index": 0, "val": "Fred"}
  {"id": 1, "index": 1, "val": "Lakshmi"}
  {"id": 2, "index": 0, "val": "Yao"}
  {"id": 2, "index": 1, "val": "Phil"}
  {"id": 2, "index": 2, "val": "Alvin"}
  {"id": 3, "index": 0, "val": "Nicolai"}
  {"id": 3, "index": 1, "val": "Karen"}
}}}
```

이 테이블에서 '`id`'는 어레이 요소의 출처인 레코드를 식별하는 조인 키이며, '`index`'는 원본 어레이에서 그 위치를 나타내고, '`val`'는 실제 어레이 항목입니다.

`relationalize` 방법은 이 프로세스를 모든 어레이에 반복 적용하여 생성되는 `DynamicFrame`의 시퀀스를 반환합니다.

**참고**  
AWS Glue 라이브러리는 자동으로 새 테이블에 대한 조인 키를 생성합니다. 작업 실행 간 조인 키가 고유하도록 만들려면 작업 북마크를 활성화해야 합니다.

## def renameField
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-renameField"></a>

```
def renameField( oldName : String,
                 newName : String,
                 transformationContext : String = "",
                 callSite : CallSite = CallSite("Not provided", ""),
                 stageThreshold : Long = 0,
                 totalThreshold : Long = 0
               ) : DynamicFrame
```
+ `oldName` - 열의 원래 이름입니다.
+ `newName` - 열의 새 이름입니다.

이름이 바뀐 지정 필드로 새 `DynamicFrame`을 반환합니다.

이 방법을 사용하여 중첩된 필드의 이름을 바꿀 수 있습니다. 예를 들어 주소 구조체의 `state`라는 이름을 `state_code`로 바꿉니다.

```
{{{
  df.renameField("address.state", "address.state_code")
}}}
```

## def repartition
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-repartition"></a>

```
def repartition( numPartitions : Int,
                 transformationContext : String = "",
                 callSite : CallSite = CallSite("Not provided", ""),
                 stageThreshold : Long = 0,
                 totalThreshold : Long = 0
               ) : DynamicFrame
```

`numPartitions` 파티션이 있는 새 `DynamicFrame`을 반환합니다.

## def resolveChoice
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-resolveChoice"></a>

```
def resolveChoice( specs : Seq[Product2[String, String]] = Seq.empty[ResolveSpec],
                   choiceOption : Option[ChoiceOption] = None,
                   database : Option[String] = None,
                   tableName : Option[String] = None,
                   transformationContext : String = "",
                   callSite : CallSite = CallSite("Not provided", ""),
                   stageThreshold : Long = 0,
                   totalThreshold : Long = 0
                 ) : DynamicFrame
```
+ `choiceOption` - 사양 시퀀스에 열거되지 않는 모든 `ChoiceType` 열에 적용되는 작업입니다.
+ `database` - `match_catalog` 작업에 사용할 Data Catalog 데이터베이스입니다.
+ `tableName` - `match_catalog` 작업에 사용할 Data Catalog 테이블입니다.

하나 이상의 `ChoiceType`을 보다 구체적인 유형으로 대체하여 새로운 `DynamicFrame`을 반환합니다.

`resolveChoice`를 사용하는 방법은 두 가지입니다. 첫 번째는 지정 열의 시퀀스와 확인 방법을 지정하는 방법입니다. (열과 작업)쌍으로 구성된 튜플로 지정합니다.

가능한 작업은 다음과 같습니다.
+ `cast:type` - 모든 값을 지정된 유형으로 캐스트하는 시도를 합니다.
+ `make_cols` - 각 유형을 `columnName_type`이라는 이름을 가진 열로 변환합니다.
+ `make_struct` - 열을 각 유형에 대한 키가 있는 구조체로 변환합니다.
+ `project:type` - 지정된 유형의 값만 유지합니다.

`resolveChoice`의 또 다른 모드는 모든 `ChoiceType`에 대해 단 하나의 해결책을 지정하는 것입니다. 실행 전에 `ChoiceType`의 완전한 목록을 모르는 경우에 사용할 수 있습니다. 이 모드는 위에서 나열한 작업 외에 다음 작업을 지원합니다.
+ `match_catalog` - 각 `ChoiceType`을 지정된 카탈로그 테이블의 해당 유형에 캐스팅해봅니다.

**예**:

int로 캐스팅을 해서 `user.id` 열을 확인하고, `address` 필드에는 구조체만 유지합니다.

```
{{{
  df.resolveChoice(specs = Seq(("user.id", "cast:int"), ("address", "project:struct")))
}}}
```

각 선택을 개별 열로 변환하여 전체 `ChoiceType`을 확인합니다.

```
{{{
  df.resolveChoice(choiceOption = Some(ChoiceOption("make_cols")))
}}}
```

지정된 카탈로그 테이블의 유형으로 캐스팅하여 전체 `ChoiceType`을 확인합니다.

```
{{{
  df.resolveChoice(choiceOption = Some(ChoiceOption("match_catalog")),
                   database = Some("my_database"),
                   tableName = Some("my_table"))
}}}
```

## def schema
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-schema"></a>

```
def schema : Schema 
```

이 `DynamicFrame`의 스키마를 반환합니다.

반환되는 스키마에는 이 `DynamicFrame`의 레코드에 있는 모든 필드가 있습니다. 단, 많지는 않지만 추가 필드가 포함되는 경우도 있을 수 있습니다. [unnest](#glue-etl-scala-apis-glue-dynamicframe-class-defs-unnest) 방법을 사용하여 이 `DynamicFrame`의 레코드에 따라 스키마를 "줄일" 수 있습니다.

## def selectField
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-selectField"></a>

```
def selectField( fieldName : String,
                 transformationContext : String = "",
                 callSite : CallSite = CallSite("Not provided", ""),
                 stageThreshold : Long = 0,
                 totalThreshold : Long = 0
               ) : DynamicFrame
```

단일 필드를 `DynamicFrame`으로 반환합니다.

## def selectFields
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-selectFields"></a>

```
def selectFields( paths : Seq[String],
                  transformationContext : String = "",
                  callSite : CallSite = CallSite("Not provided", ""),
                  stageThreshold : Long = 0,
                  totalThreshold : Long = 0
                ) : DynamicFrame
```
+ `paths` - 선택할 열 이름의 시퀀스입니다.

지정한 열이 포함된 새 `DynamicFrame`을 반환합니다.

**참고**  
최상위 열에만 `selectFields` 방법을 사용할 수 있습니다. [applyMapping](#glue-etl-scala-apis-glue-dynamicframe-class-defs-applyMapping) 방법을 사용하여 중첩된 열을 선택할 수 있습니다.

## def show
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-show"></a>

```
def show( numRows : Int = 20 ) : Unit 
```
+ `numRows` - 인쇄할 행의 개수입니다.

이 `DynamicFrame`의 행을 JSON 형식으로 인쇄합니다.

## Def simplifyDDBJson
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-simplifyDDBJson"></a>

AWS Glue DynamoDB 내보내기 커넥터를 사용하여 DynamoDB 내보내기를 수행하면 특정 중첩 구조의 JSON 파일이 생성됩니다. 자세한 내용은 [데이터 객체](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataExport.Output.html)를 참조하세요. `simplifyDDBJson` 이러한 유형의 데이터에 대한 DynamicFrame의 중첩 열을 단순화하고 단순화된 새로운 DynamicFrame을 반환합니다. 목록 유형에 여러 유형이 있거나 맵 유형이 포함된 경우 목록의 요소는 단순화되지 않습니다. 이 메서드는 DynamoDB 내보내기 JSON 형식의 데이터만 지원합니다. 다른 종류의 데이터에 대해 유사한 변경을 수행하려면 `unnest`를 고려하세요.

```
def simplifyDDBJson() : DynamicFrame 
```

이 메서드에서는 파라미터를 사용하지 않습니다.

**입력 예**

DynamoDB 내보내기로 생성된 다음 스키마를 고려해 보세요.

```
root
|-- Item: struct
|    |-- parentMap: struct
|    |    |-- M: struct
|    |    |    |-- childMap: struct
|    |    |    |    |-- M: struct
|    |    |    |    |    |-- appName: struct
|    |    |    |    |    |    |-- S: string
|    |    |    |    |    |-- packageName: struct
|    |    |    |    |    |    |-- S: string
|    |    |    |    |    |-- updatedAt: struct
|    |    |    |    |    |    |-- N: string
|    |-- strings: struct
|    |    |-- SS: array
|    |    |    |-- element: string
|    |-- numbers: struct
|    |    |-- NS: array
|    |    |    |-- element: string
|    |-- binaries: struct
|    |    |-- BS: array
|    |    |    |-- element: string
|    |-- isDDBJson: struct
|    |    |-- BOOL: boolean
|    |-- nullValue: struct
|    |    |-- NULL: boolean
```

**예제 코드**

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamoDbDataSink
import org.apache.spark.SparkContextimport scala.collection.JavaConverters._

object GlueApp {

  def main(sysArgs: Array[String]): Unit = {
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType = "dynamodb",
      options = JsonOptions(Map(
        "dynamodb.export" -> "ddb",
        "dynamodb.tableArn" -> "ddbTableARN",
        "dynamodb.s3.bucket" -> "exportBucketLocation",
        "dynamodb.s3.prefix" -> "exportBucketPrefix",
        "dynamodb.s3.bucketOwner" -> "exportBucketAccountID",
      ))
    ).getDynamicFrame()
    
    val simplified = dynamicFrame.simplifyDDBJson()
    simplified.printSchema()

    Job.commit()
  }

}
```

### 출력 예시
<a name="simplifyDDBJson-example-output"></a>

`simplifyDDBJson` 변환은 이를 다음과 같이 간소화합니다.

```
root
|-- parentMap: struct
|    |-- childMap: struct
|    |    |-- appName: string
|    |    |-- packageName: string
|    |    |-- updatedAt: string
|-- strings: array
|    |-- element: string
|-- numbers: array
|    |-- element: string
|-- binaries: array
|    |-- element: string
|-- isDDBJson: boolean
|-- nullValue: null
```

## def spigot
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-spigot"></a>

```
def spigot( path : String,
            options : JsonOptions = new JsonOptions("{}"),
            transformationContext : String = "",
            callSite : CallSite = CallSite("Not provided"),
            stageThreshold : Long = 0,
            totalThreshold : Long = 0
          ) : DynamicFrame
```

동일한 레코드를 반환하지만 부수적으로 레코드의 하위 집합을 작성하는 패스스루 변환입니다.
+ `path` - `s3://bucket//path` 형식으로 출력을 쓸 Amazon S3의 경로입니다.
+ `options` - 샘플링 동작을 설명하는 선택 사항인 `JsonOptions` 맵입니다.

이것과 동일한 레코드가 포함된 `DynamicFrame`을 반환합니다.

`path`로 지정한 위치에 임의의 레코드 100개를 작성하는 것이 기본값입니다. `options` 맵을 사용하여 이 동작을 사용자 지정할 수 있습니다. 유효한 키에는 다음이 포함되어 있습니다.
+ `topk` - 작성할 레코드의 총 개수를 지정합니다. 기본값은 100입니다.
+ `prob` - 개별 레코드의 포함 확률(십진수)을 지정합니다. 기본값은 1.

예를 들어 다음 호출은 20퍼센트의 확률로 각 레코드를 선택하고 200개의 레코드를 작성한 후에 중단하는 방법으로 데이터 세트를 샘플링합니다.

```
{{{
  df.spigot("s3://my_bucket/my_path", JsonOptions(Map("topk" -&gt; 200, "prob" -&gt; 0.2)))
}}}
```

## def splitFields
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-splitFields"></a>

```
def splitFields( paths : Seq[String],
                 transformationContext : String = "",
                 callSite : CallSite = CallSite("Not provided", ""),
                 stageThreshold : Long = 0,
                 totalThreshold : Long = 0
               ) : Seq[DynamicFrame]
```
+ `paths` - 첫 `DynamicFrame`에 포함될 경로입니다.

두 개 `DynamicFrame`의 시퀀스를 반환합니다. 첫 번째 `DynamicFrame`에는 지정 경로가, 두 번째에는 나머지 열 전부가 포함됩니다.

**예제**

이 예제에서는 AWS Glue Data Catalog의 `legislators` 데이터베이스에 있는 `persons` 테이블에서 생성된 DynamicFrame을 사용하고 두 개의 DynamicFrame으로 분할합니다. 지정된 필드는 첫 번째 DynamicFrame으로 이동하고, 나머지 필드는 두 번째 DynamicFrame으로 이동합니다. 그런 다음, 예제는 결과에서 첫 번째 DynamicFrame을 선택합니다.

```
val InputFrame = glueContext.getCatalogSource(database="legislators", tableName="persons", 
transformationContext="InputFrame").getDynamicFrame()

val SplitField_collection = InputFrame.splitFields(paths=Seq("family_name", "name", "links.note", 
"links.url", "gender", "image", "identifiers.scheme", "identifiers.identifier", "other_names.lang", 
"other_names.note", "other_names.name"), transformationContext="SplitField_collection")

val ResultFrame = SplitField_collection(0)
```

## def splitRows
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-splitRows"></a>

```
def splitRows( paths : Seq[String],
               values : Seq[Any],
               operators : Seq[String],
               transformationContext : String,
               callSite : CallSite,
               stageThreshold : Long,
               totalThreshold : Long
             ) : Seq[DynamicFrame]
```

열을 상수에 비교하는 조건자에 따라 행을 분할합니다.
+ `paths` - 비교에 사용할 열입니다.
+ `values` - 비교에 사용할 상수 값입니다.
+ `operators` - 비교에 사용할 연산자입니다.

두 개 `DynamicFrame`의 시퀀스를 반환합니다. 첫 번째에는 조건자가 true, 두 번째에는 조건자가 false인 행이 포함됩니다.

조건자는 다음 세 개의 시퀀스를 사용하여 지정됩니다. '`paths`'에는 (중첩될 수 있는) 열 이름이 포함되고, '`values`'에는 비교할 상수 값이 포함되며, '`operators`'에는 비교에 사용할 연산자가 포함됩니다. 세 가지 시퀀스는 모두 길이가 같아야 합니다. `n`번째 연산자를 사용하여 `n`번째 열과 `n`번째 값을 비교합니다.

각 연산자는 "`!=`", "`=`", "`<=`", "`<`", "`>=`" 또는 "`>`" 중 하나여야 합니다.

예를 들어 다음 호출은 첫 번째 출력 프레임에는 65세 이상의 미국인에 대한 레코드가 포함되고 두 번째에는 나머지 레코드 전부가 포함되도록 `DynamicFrame`을 분할합니다.

```
{{{
  df.splitRows(Seq("age", "address.country"), Seq(65, "USA"), Seq("&gt;=", "="))
}}}
```

## def stageErrorsCount
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-stageErrorsCount"></a>

```
def stageErrorsCount
```

이 `DynamicFrame`을 계산하는 동안 생성된 오류 레코드의 개수를 반환합니다. 이 `DynamicFrame`에 입력으로 전달된 이전 작업의 오류는 제외됩니다.

## def toDF
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-toDF"></a>

```
def toDF( specs : Seq[ResolveSpec] = Seq.empty[ResolveSpec] ) : DataFrame 
```

이 `DynamicFrame`을 스키마와 레코드가 동일한 Apache Spark SQL `DataFrame`으로 변환합니다.

**참고**  
`DataFrame`은 `ChoiceType`을 지원하지 않으므로 이 방법은 `ChoiceType` 열을 `StructType`로 자동 변환합니다. 선택할 수 있는 확인(해결) 방법에 대한 자세한 내용은 [resolveChoice](#glue-etl-scala-apis-glue-dynamicframe-class-defs-resolveChoice) 단원을 참조하십시오.

## def unbox
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-unbox"></a>

```
def unbox( path : String,
           format : String,
           optionString : String = "{}",
           transformationContext : String = "",
           callSite : CallSite = CallSite("Not provided"),
           stageThreshold : Long = 0,
           totalThreshold : Long = 0
         ) : DynamicFrame
```
+ `path` - 구문 분석할 열입니다. 문자열 또는 이진수여야 합니다.
+ `format` - 구문 분석에 사용할 포맷입니다.
+ `optionString` - CSV 구분자 같은 포맷으로 전달되는 옵션입니다.

지정 형식에 따라 포함된 문자열이나 이진수 열을 구문 분석합니다. 구문 분석한 열은 원래 열 이름을 가진 구조체 아래 중첩됩니다.

예를 들어 JSON 열이 포함된 CSV 파일이 있다고 가정해보겠습니다.

```
name, age, address
Sally, 36, {"state": "NE", "city": "Omaha"}
...
```

최초 구문 분석 후에 다음 스키마를 갖는 `DynamicFrame`이 생깁니다.

```
{{{
  root
  |-- name: string
  |-- age: int
  |-- address: string
}}}
```

주소 열에 `unbox`를 호출해 지정 구성 요소를 구문 분석할 수 있습니다.

```
{{{
  df.unbox("address", "json")
}}}
```

그러면 다음 스키마를 갖는 `DynamicFrame`이 생깁니다.

```
{{{
  root
  |-- name: string
  |-- age: int
  |-- address: struct
  |    |-- state: string
  |    |-- city: string
}}}
```

## def unnest
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-unnest"></a>

```
def unnest( transformationContext : String = "",
            callSite : CallSite = CallSite("Not Provided"),
            stageThreshold : Long = 0,
            totalThreshold : Long = 0
          ) : DynamicFrame
```

중첩된 구조가 모두 평면화된 새 `DynamicFrame`이 반환됩니다. 이름은 '`.`'(마침표) 문자를 사용하여 생성합니다.

예를 들어 `DynamicFrame`에 다음 스키마가 있다고 가정해보겠습니다.

```
{{{
  root
  |-- name: string
  |-- age: int
  |-- address: struct
  |    |-- state: string
  |    |-- city: string
}}}
```

다음 호출은 주소 구조체의 중첩을 해제합니다.

```
{{{
  df.unnest()
}}}
```

결과 스키마는 다음과 같습니다.

```
{{{
  root
  |-- name: string
  |-- age: int
  |-- address.state: string
  |-- address.city: string
}}}
```

이 방법도 어레이 내부에 중첩된 구조체의 중첩을 해제합니다. 그러나 기록을 위해 이러한 필드는 포함되는 어레이의 이름과 "`.val`"이 이름 앞에 붙습니다.

## def unnestDDBJson
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-unnestddbjson"></a>

```
unnestDDBJson(transformationContext : String = "",
            callSite : CallSite = CallSite("Not Provided"),
            stageThreshold : Long = 0,
            totalThreshold : Long = 0): DynamicFrame
```

DynamoDB JSON 구조의 `DynamicFrame`에 있는 중첩된 열을 한정해서 중첩 해제하고, 중첩되지 않은 새 `DynamicFrame`을 반환합니다. 구조체 유형 배열인 열은 중첩 해제되지 않습니다. 이 변환은 일반적인 `unnest` 변환과는 다르게 작동하는 특정 유형의 중첩 해제 변환이며, 데이터가 이미 DynamoDB JSON 구조에 있어야 합니다. 자세한 내용은 [DynamoDB JSON](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataExport.Output.html#DataExport.Output.Data)을 참조하세요.

예를 들어, DynamoDB JSON 구조를 사용하여 내보내기를 읽는 스키마는 다음과 같을 수 있습니다.

```
root
|-- Item: struct
|    |-- ColA: struct
|    |    |-- S: string
|    |-- ColB: struct
|    |    |-- S: string
|    |-- ColC: struct
|    |    |-- N: string
|    |-- ColD: struct
|    |    |-- L: array
|    |    |    |-- element: null
```

`unnestDDBJson()` 변환은 이 구조를 다음과 같이 변환합니다.

```
root
|-- ColA: string
|-- ColB: string
|-- ColC: string
|-- ColD: array    
|    |-- element: null
```

다음 코드 예제에서는 AWS Glue DynamoDB 내보내기 커넥터를 사용하고, DynamoDB JSON unnest를 호출하고, 파티션 수를 인쇄하는 방법을 보여줍니다.

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamoDbDataSink
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._


object GlueApp {

  def main(sysArgs: Array[String]): Unit = {
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType = "dynamodb",
      options = JsonOptions(Map(
        "dynamodb.export" -> "ddb",
        "dynamodb.tableArn" -> "<test_source>",
        "dynamodb.s3.bucket" -> "<bucket name>",
        "dynamodb.s3.prefix" -> "<bucket prefix>",
        "dynamodb.s3.bucketOwner" -> "<account_id of bucket>",
      ))
    ).getDynamicFrame()
    
    val unnested = dynamicFrame.unnestDDBJson()
    print(unnested.getNumPartitions())

    Job.commit()
  }

}
```

## def withFrameSchema
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-withFrameSchema"></a>

```
def withFrameSchema( getSchema : () => Schema ) : DynamicFrame 
```
+ `getSchema` - 사용할 스키마를 반환하는 함수입니다. 0이라는 파라미터 함수로 지정을 하면 비용이 많이 드는 계산을 연기할 수 있습니다.

이 `DynamicFrame`의 스키마를 지정된 값으로 설정합니다. 비용이 많이 드는 스키마 재계산을 피하기 위해 주로 내부에서 사용합니다. 통과된 스키마에는 데이터에 존재하는 모든 열이 포함되어 있어야 합니다.

## def withName
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-withName"></a>

```
def withName( name : String ) : DynamicFrame 
```
+ `name` - 사용할 새 이름입니다.

새 이름이 있는 이 `DynamicFrame`의 복사본을 반환합니다.

## def withTransformationContext
<a name="glue-etl-scala-apis-glue-dynamicframe-class-defs-withTransformationContext"></a>

```
def withTransformationContext( ctx : String ) : DynamicFrame 
```

지정된 변환 컨텍스트가 있는 이 `DynamicFrame`의 복사본을 반환합니다.

# DynamicFrame 객체
<a name="glue-etl-scala-apis-glue-dynamicframe-object"></a>

**패키지:   com.amazonaws.services.glue**

```
object DynamicFrame
```

## def apply
<a name="glue-etl-scala-apis-glue-dynamicframe-object-defs-apply"></a>

```
def apply( df : DataFrame,
           glueContext : GlueContext
         ) : DynamicFrame
```



## def emptyDynamicFrame
<a name="glue-etl-scala-apis-glue-dynamicframe-object-defs-emptyDynamicFrame"></a>

```
def emptyDynamicFrame( glueContext : GlueContext ) : DynamicFrame 
```



## def fromPythonRDD
<a name="glue-etl-scala-apis-glue-dynamicframe-object-defs-fromPythonRDD"></a>

```
def fromPythonRDD( rdd : JavaRDD[Array[Byte]],
                   glueContext : GlueContext
                 ) : DynamicFrame
```



## def ignoreErrors
<a name="glue-etl-scala-apis-glue-dynamicframe-object-defs-ignoreErrors"></a>

```
def ignoreErrors( fn : DynamicRecord => DynamicRecord ) : DynamicRecord 
```



## def inlineErrors
<a name="glue-etl-scala-apis-glue-dynamicframe-object-defs-inlineErrors"></a>

```
def inlineErrors( msg : String,
                  callSite : CallSite
                ) : (DynamicRecord => DynamicRecord)
```



## def newFrameWithErrors
<a name="glue-etl-scala-apis-glue-dynamicframe-object-defs-newFrameWithErrors"></a>

```
def newFrameWithErrors( prevFrame : DynamicFrame,
                        rdd : RDD[DynamicRecord],
                        name : String = "",
                        transformationContext : String = "",
                        callSite : CallSite,
                        stageThreshold : Long,
                        totalThreshold : Long
                      ) : DynamicFrame
```



# AWS Glue Scala DynamicRecord 클래스
<a name="glue-etl-scala-apis-glue-dynamicrecord-class"></a>

**Topics**
+ [def addField](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-addField)
+ [def dropField](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-dropField)
+ [def setError](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-setError)
+ [def isError](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-isError)
+ [def getError](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getError)
+ [def clearError](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-clearError)
+ [def write](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-write)
+ [def readFields](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-readFields)
+ [def clone](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-clone)
+ [def schema](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-schema)
+ [def getRoot](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getRoot)
+ [def toJson](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-toJson)
+ [def getFieldNode](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getFieldNode)
+ [def getField](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-getField)
+ [def hashCode](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-hashCode)
+ [def equals](#glue-etl-scala-apis-glue-dynamicrecord-class-defs-equals)
+ [DynamicRecord 객체](#glue-etl-scala-apis-glue-dynamicrecord-object)
+ [RecordTraverser 특성](#glue-etl-scala-apis-glue-recordtraverser-trait)

**패키지:   com.amazonaws.services.glue**

```
class DynamicRecord extends Serializable with Writable with Cloneable
```

`DynamicRecord`는 진행된 데이터 세트의 데이터 행을 나타내는 자체적으로 설명되는 데이터 구조입니다. 기록 자체를 검사한 `DynamicRecord`에 의해 보여지는 스키마 행을 얻을 수 있다는 의미에서 자체 설명적입니다. `DynamicRecord`는 Apache Spark의 `Row`와 유사합니다.

## def addField
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-addField"></a>

```
def addField( path : String,
              dynamicNode : DynamicNode
            ) : Unit
```

지정된 경로로 [DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md)를 추가합니다.
+ `path` - 필드를 추가할 경로입니다.
+ `dynamicNode` - 지정된 경로에 추가될 [DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md)입니다.

## def dropField
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-dropField"></a>

```
 def dropField(path: String, underRename: Boolean = false): Option[DynamicNode]
```

지정된 경로로부터 [DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md)을 드롭하고 지정된 경로에 배열이 없으면 드롭된 노트를 반환합니다.
+ `path` - 필드를 제거할 경로입니다.
+ `underRename` - `dropField`가 이름 변경 변환의 일부로 호출되는 경우는 true이고, 아닌 경우는 false입니다(기본값은 false).

`scala.Option Option`([DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md))을 반환합니다.

## def setError
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-setError"></a>

```
def setError( error : Error )
```

`error` 파라미터에 의해 지정되어 이 기록을 오류 기록으로 설정합니다.

`DynamicRecord`을 반환합니다.

## def isError
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-isError"></a>

```
def isError
```

이 기록이 오류 기록인지 확인합니다.

## def getError
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-getError"></a>

```
def getError
```

이 기록이 오류 기록이면 `Error`를 얻습니다. 이 기록이 오류 기록이면 `scala.Some Some`(오류)를 반환하고 그렇지 않으면 `scala.None`입니다.

## def clearError
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-clearError"></a>

```
def clearError
```

`Error`을 `scala.None.None`로 설정합니다.

## def write
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-write"></a>

```
override def write( out : DataOutput ) : Unit 
```



## def readFields
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-readFields"></a>

```
override def readFields( in : DataInput ) : Unit 
```



## def clone
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-clone"></a>

```
override def clone : DynamicRecord 
```

이 레코드를 새 `DynamicRecord`로 복제하고 반환합니다.

## def schema
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-schema"></a>

```
def schema
```

이 기록을 검사하여 `Schema`를 얻습니다.

## def getRoot
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-getRoot"></a>

```
def getRoot : ObjectNode 
```

이 레코드의 루트 `ObjectNode`를 얻습니다.

## def toJson
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-toJson"></a>

```
def toJson : String 
```

이 레코드의 JSON 문자열을 얻습니다.

## def getFieldNode
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-getFieldNode"></a>

```
def getFieldNode( path : String ) : Option[DynamicNode] 
```

`DynamicNode`의 옵션으로 지정된 `path`의 필드 값을 가져옵니다.

필드가 존재하는 경우 `scala.Some Some`([DynamicNode](glue-etl-scala-apis-glue-types-dynamicnode.md))을 반환하고, 그렇지 않으면 `scala.None.None`입니다.

## def getField
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-getField"></a>

```
def getField( path : String ) : Option[Any] 
```

`DynamicNode`의 옵션으로 지정된 `path`의 필드 값을 가져옵니다.

`scala.Some Some`(값)을 반환합니다.

## def hashCode
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-hashCode"></a>

```
override def hashCode : Int 
```



## def equals
<a name="glue-etl-scala-apis-glue-dynamicrecord-class-defs-equals"></a>

```
override def equals( other : Any )
```



## DynamicRecord 객체
<a name="glue-etl-scala-apis-glue-dynamicrecord-object"></a>

```
object DynamicRecord
```

### 정의 적용
<a name="glue-etl-scala-apis-glue-dynamicrecord-object-defs-apply"></a>

```
def apply( row : Row,
           schema : SparkStructType )
```

Apache Spark SQL `Row`를 [DynamicRecord](#glue-etl-scala-apis-glue-dynamicrecord-class)로 변환하는 방법을 적용합니다.
+ `row` - Spark SQL `Row`.
+ `schema` - 행의 `Schema`입니다.

`DynamicRecord`을 반환합니다.

## RecordTraverser 특성
<a name="glue-etl-scala-apis-glue-recordtraverser-trait"></a>

```
trait RecordTraverser {
  def nullValue(): Unit
  def byteValue(value: Byte): Unit
  def binaryValue(value: Array[Byte]): Unit
  def booleanValue(value: Boolean): Unit
  def shortValue(value: Short) : Unit
  def intValue(value: Int) : Unit
  def longValue(value: Long) : Unit
  def floatValue(value: Float): Unit
  def doubleValue(value: Double): Unit
  def decimalValue(value: BigDecimal): Unit
  def stringValue(value: String): Unit
  def dateValue(value: Date): Unit
  def timestampValue(value: Timestamp): Unit
  def objectStart(length: Int): Unit
  def objectKey(key: String): Unit
  def objectEnd(): Unit
  def mapStart(length: Int): Unit
  def mapKey(key: String): Unit
  def mapEnd(): Unit
  def arrayStart(length: Int): Unit
  def arrayEnd(): Unit
}
```

# AWS Glue Scala GlueContext API
<a name="glue-etl-scala-apis-glue-gluecontext"></a>

**패키지:   com.amazonaws.services.glue**

```
class GlueContext extends SQLContext(sc) (
           @transient val sc : SparkContext,
           val defaultSourcePartitioner : PartitioningStrategy )
```

`GlueContext`는 Amazon Simple Storage Service(Amazon S3), AWS Glue Data Catalog, JDBC 등에서 [DynamicFrame](glue-etl-scala-apis-glue-dynamicframe.md)을 읽고 쓰기 위한 진입점입니다. 이 클래스는 [DataSource 특성](glue-etl-scala-apis-glue-datasource-trait.md) 및 [DataSink](glue-etl-scala-apis-glue-datasink-class.md) 객체를 생성하는 유틸리티 함수를 제공하며, 이 객체는 `DynamicFrame`을 읽고 쓸 때 사용할 수 있습니다.

`GlueContext`를 사용하여 `DynamicFrame`에 목표한 수의 파티션(기본값 20)을 설정할 수도 있습니다. 단, 소스에서 생성된 파티션 수가 파티션 최소 임계값(기본값 10) 미만이어야 합니다.

## def addIngestionColumns
<a name="glue-etl-scala-apis-glue-gluecontext-defs-addIngestionTimeColumns"></a>

```
def addIngestionTimeColumns(
         df : DataFrame, 
         timeGranularity : String = "") : dataFrame
```

입력 `DataFrame`에 `ingest_year`, `ingest_month`, `ingest_day`, `ingest_hour`, `ingest_minute`와 같은 수집 시간 열을 추가합니다. 이 함수는 Amazon S3을 대상으로 하는 데이터 카탈로그 테이블을 지정할 때 AWS Glue가 생성하는 스크립트에서 자동으로 생성됩니다. 이 함수는 출력 테이블의 수집 시간 열로 파티션을 자동으로 업데이트합니다. 이를 통해 입력 데이터에 명시적인 수집 시간 열을 요구하지 않고도 출력 데이터를 수집 시간에 자동으로 분할할 수 있습니다.
+ `dataFrame` - 수집 시간 열을 추가할 `dataFrame`입니다.
+ `timeGranularity` - 시간 열의 세분성입니다. 유효 값은 "`day`", "`hour`" 및 "`minute`"입니다. 예를 들어 "`hour`"가 함수에 전달되면 원래 `dataFrame`에 "`ingest_year`", "`ingest_month`", "`ingest_day`" 및 "`ingest_hour`" 시간 열이 추가됩니다.

시간 세분성 열을 추가한 후 데이터 프레임을 반환합니다.

예제:

```
glueContext.addIngestionTimeColumns(dataFrame, "hour")
```

## def createDataFrameFromOptions
<a name="glue-etl-scala-apis-glue-gluecontext-defs-createDataFrameFromOptions"></a>

```
def createDataFrameFromOptions( connectionType : String,
                         connectionOptions : JsonOptions,
                         transformationContext : String = "",
                         format : String = null,
                         formatOptions : JsonOptions = JsonOptions.empty
                       ) : DataSource
```

지정된 연결 및 포맷으로 생성된 `DataFrame`을 반환합니다. 이 함수는 AWS Glue 스트리밍 소스에만 사용합니다.
+ `connectionType` - 스트리밍 연결 유형입니다. 유효한 값에는 `kinesis` 및 `kafka`(이)가 있습니다.
+ `connectionOptions` - 연결 옵션이며, Kinesis 및 Kafka에 대해 서로 다릅니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)에서 각 스트리밍 데이터 원본에 대한 모든 연결 옵션 목록을 찾을 수 있습니다. 스트리밍 연결 옵션에는 다음과 같은 차이점이 있습니다.
  + Kinesis 스트리밍 소스에는 `streamARN`, `startingPosition`, `inferSchema` 및 `classification`이 필요합니다.
  + Kafka 스트리밍 소스에는 `connectionName`, `topicName`, `startingOffsets`, `inferSchema` 및 `classification`이 필요합니다.
+ `transformationContext` - 사용할 변환 컨텍스트입니다(선택 사항).
+ `format` - 형식 사양입니다(선택 사항). 여러 포맷을 지원하는 Amazon S3 또는 AWS Glue 연결에 사용됩니다. 지원되는 형식에 관한 내용은 [AWS Glue for Spark에서 입력 및 출력의 데이터 형식 옵션](aws-glue-programming-etl-format.md) 섹션을 참조하세요.
+ `formatOptions` - 지정된 형식에 대한 형식 옵션입니다. 지원되는 포맷 옵션에 대한 자세한 내용은 [데이터 포맷 옵션](aws-glue-programming-etl-format.md) 섹션을 참조하세요.

Amazon Kinesis 스트리밍 소스의 예:

```
val data_frame_datasource0 = 
glueContext.createDataFrameFromOptions(transformationContext = "datasource0", connectionType = "kinesis", 
connectionOptions = JsonOptions("""{"streamName": "example_stream", "startingPosition": "TRIM_HORIZON", "inferSchema": "true", "classification": "json"}}"""))
```

Kafka 스트리밍 소스의 예:

```
val data_frame_datasource0 = 
glueContext.createDataFrameFromOptions(transformationContext = "datasource0", connectionType = "kafka", 
connectionOptions = JsonOptions("""{"connectionName": "example_connection", "topicName": "example_topic", "startingPosition": "earliest", "inferSchema": "false", "classification": "json", "schema":"`column1` STRING, `column2` STRING"}"""))
```

## forEachBatch
<a name="glue-etl-scala-apis-glue-gluecontext-defs-forEachBatch"></a>

**`forEachBatch(frame, batch_function, options)`**

스트리밍 소스에서 읽는 모든 마이크로 배치에 전달된 `batch_function`을 적용합니다.
+ `frame` - 현재 마이크로 배치를 포함하는 DataFrame입니다.
+ `batch_function` - 모든 마이크로 배치에 적용될 함수입니다.
+ `options` - 마이크로 배치를 처리하는 방법에 대한 정보가 들어 있는 키-값 페어 컬렉션입니다. 다음 옵션이 필요합니다.
  + `windowSize` - 각 배치를 처리하는 데 소요되는 시간입니다.
  + `checkpointLocation` - 스트리밍 ETL 작업에 대해 체크포인트가 저장되는 위치입니다.
  + `batchMaxRetries` – 실패한 경우 배치를 다시 시도할 수 있는 최대 횟수입니다. 기본값은 3입니다. 이 옵션은 Glue 버전 2.0 이상에서만 구성할 수 있습니다.

**예시:**

```
glueContext.forEachBatch(data_frame_datasource0, (dataFrame: Dataset[Row], batchId: Long) => 
   {
      if (dataFrame.count() > 0) 
        {
          val datasource0 = DynamicFrame(glueContext.addIngestionTimeColumns(dataFrame, "hour"), glueContext)
          // @type: DataSink
          // @args: [database = "tempdb", table_name = "fromoptionsoutput", stream_batch_time = "100 seconds", 
          //      stream_checkpoint_location = "s3://from-options-testing-eu-central-1/fromOptionsOutput/checkpoint/", 
          //      transformation_ctx = "datasink1"]
          // @return: datasink1
          // @inputs: [frame = datasource0]
          val options_datasink1 = JsonOptions(
             Map("partitionKeys" -> Seq("ingest_year", "ingest_month","ingest_day", "ingest_hour"), 
             "enableUpdateCatalog" -> true))
          val datasink1 = glueContext.getCatalogSink(
             database = "tempdb", 
             tableName = "fromoptionsoutput", 
             redshiftTmpDir = "", 
             transformationContext = "datasink1", 
             additionalOptions = options_datasink1).writeDynamicFrame(datasource0)
        }
   }, JsonOptions("""{"windowSize" : "100 seconds", 
         "checkpointLocation" : "s3://from-options-testing-eu-central-1/fromOptionsOutput/checkpoint/"}"""))
```

## def getCatalogSink
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSink"></a>

```
def getCatalogSink( database : String,
        tableName : String,
        redshiftTmpDir : String = "",
        transformationContext : String = ""
        additionalOptions: JsonOptions = JsonOptions.empty,
        catalogId: String = null   
) : DataSink
```

Data Catalog에 정의된 테이블에 지정된 위치에 쓰는 [DataSink](glue-etl-scala-apis-glue-datasink-class.md)를 생성합니다.
+ `database` - Data Catalog에 있는 데이터베이스 이름입니다.
+ `tableName` - Data Catalog에 있는 테이블 이름입니다.
+ `redshiftTmpDir` - 특정 데이터 싱크와 사용되는 임시 준비 디렉터리입니다. 기본적으로 비우도록 설정합니다.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.
+ `additionalOptions` - AWS Glue에 제공되는 추가 옵션입니다.
+ `catalogId` - 액세스 중인 Data Catalog의 카탈로그 ID(계정 ID)입니다. null인 경우 호출자의 기본 계정 ID가 사용됩니다.

`DataSink`을 반환합니다.

## def getCatalogSource
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSource"></a>

```
def getCatalogSource( database : String,
                      tableName : String,
                      redshiftTmpDir : String = "",
                      transformationContext : String = ""
                      pushDownPredicate : String = " "
                      additionalOptions: JsonOptions = JsonOptions.empty,
                      catalogId: String = null
                    ) : DataSource
```

Data Catalog의 테이블 정의에서 데이터를 읽는 [DataSource 특성](glue-etl-scala-apis-glue-datasource-trait.md)를 생성합니다.
+ `database` - Data Catalog에 있는 데이터베이스 이름입니다.
+ `tableName` - Data Catalog에 있는 테이블 이름입니다.
+ `redshiftTmpDir` - 특정 데이터 싱크와 사용되는 임시 준비 디렉터리입니다. 기본적으로 비우도록 설정합니다.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.
+ `pushDownPredicate` - 데이터 집합 내 모든 파일을 나열하거나 읽지 않아도 파티션에 필터링할 수 있습니다. 자세한 내용은 [푸시다운 조건자를 사용하여 예비 필터링](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-pushdowns) 섹션을 참조하세요.
+ `additionalOptions` - 선택적 이름-값 페어의 모음입니다. 가능한 옵션에는 [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)에 나열된 옵션이 포함됩니다(`endpointUrl`, `streamName`, `bootstrap.servers`, `security.protocol`, `topicName`, `classification` 및 `delimiter` 제외). 지원되는 또 다른 옵션은 `catalogPartitionPredicate`입니다.

  `catalogPartitionPredicate` - 카탈로그 표현식을 전달하여 인덱스 열을 기준으로 필터링할 수 있습니다. 이렇게 하면 필터링이 서버 측으로 푸시됩니다. 자세한 내용은 [AWS Glue 파티션 인덱스](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html)를 참조하세요. `push_down_predicate`와 `catalogPartitionPredicate`는 다른 구문을 사용합니다. 전자는 Spark SQL 표준 구문을 사용하고 후자는 JSQL 구문 분석기를 사용합니다.
+ `catalogId` - 액세스 중인 Data Catalog의 카탈로그 ID(계정 ID)입니다. null인 경우 호출자의 기본 계정 ID가 사용됩니다.

`DataSource`을 반환합니다.

**스트리밍 소스의 예**

```
val data_frame_datasource0 = glueContext.getCatalogSource(
    database = "tempdb",
    tableName = "test-stream-input", 
    redshiftTmpDir = "", 
    transformationContext = "datasource0", 
    additionalOptions = JsonOptions("""{
        "startingPosition": "TRIM_HORIZON", "inferSchema": "false"}""")
    ).getDataFrame()
```

## def getJDBCSink
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getJDBCSink"></a>

```
def getJDBCSink( catalogConnection : String,
                 options : JsonOptions,
                 redshiftTmpDir : String = "",
                 transformationContext : String = "",
                 catalogId: String = null
               ) : DataSink
```

Data Catalog의 `Connection` 객체에 지정된 JDBC 데이터베이스에 쓰는 [DataSink](glue-etl-scala-apis-glue-datasink-class.md)를 생성합니다. `Connection` 객체는 URL, 사용자 이름, 암호, VPC, 서브넷 및 보안 그룹을 포함한 JDBC 싱크로 연결하는 정보를 가지고 있습니다.
+ `catalogConnection` - 작성할 JDBC URL을 포함하는 Data Catalog의 연결 이름입니다.
+ `options` - JDBC 데이터 스토어로 작성할 때 필요한 추가 정보를 제공하는 JSON 이름-값 페어의 문자열입니다. 여기에는 다음이 포함됩니다.
  + *dbtable*(필수) - JDBC 테이블의 이름입니다. 데이터베이스 내의 스키마를 지원하는 JDBC 데이터 스토어의 경우 `schema.table-name`에 대해 지정합니다. 스키마가 제공되지 않으면 기본 "퍼블릭" 스키마가 사용됩니다. 다음 예제에서는 `test`라는 스키마와 `test_db` 데이터베이스의 `test_table` 테이블을 가리키는 옵션 파라미터를 보여 줍니다.

    ```
    options = JsonOptions("""{"dbtable": "test.test_table", "database": "test_db"}""")
    ```
  + *database*(필수) - JDBC 데이터베이스의 이름입니다.
  + SparkSQL JDBC 라이터에게 직접 전달되는 추가 옵션. 자세한 내용은 [Redshift data source for Spark](https://github.com/databricks/spark-redshift)를 참조하십시오.
+ `redshiftTmpDir` - 특정 데이터 싱크와 사용되는 임시 준비 디렉터리입니다. 기본적으로 비우도록 설정합니다.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.
+ `catalogId` - 액세스 중인 Data Catalog의 카탈로그 ID(계정 ID)입니다. null인 경우 호출자의 기본 계정 ID가 사용됩니다.

예제 코드:

```
getJDBCSink(catalogConnection = "my-connection-name", options = JsonOptions("""{"dbtable": "my-jdbc-table", "database": "my-jdbc-db"}"""), redshiftTmpDir = "", transformationContext = "datasink4")
```

`DataSink`을 반환합니다.

## def getSink
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getSink"></a>

```
def getSink( connectionType : String,
             connectionOptions : JsonOptions,
             transformationContext : String = ""
           ) : DataSink
```

Amazon Simple Storage Service(S3), JDBC, AWS Glue 데이터 카탈로그나 Apache Kafka 또는 Amazon Kinesis 데이터 스트림과 같은 대상에 데이터를 쓰는 [DataSink](glue-etl-scala-apis-glue-datasink-class.md)를 생성합니다.
+ `connectionType` - 연결 유형입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `connectionOptions` - 데이터 싱크 연결하려는 추가 정보를 제공하는 JSON 이름-값 페어 문자열입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.

`DataSink`을 반환합니다.

## def getSinkWithFormat
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat"></a>

```
def getSinkWithFormat( connectionType : String,
                       options : JsonOptions,
                       transformationContext : String = "",
                       format : String = null,
                       formatOptions : JsonOptions = JsonOptions.empty
                     ) : DataSink
```

Amazon S3, JDBC, 데이터 카탈로그나 Apache Kafka 또는 Amazon Kinesis 데이터 스트림과 같은 대상에 데이터를 쓰는 [DataSink](glue-etl-scala-apis-glue-datasink-class.md)를 생성합니다. 또한 대상에 기록할 데이터의 형식을 설정합니다.
+ `connectionType` - 연결 유형입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `options` - 데이터 싱크 연결하려는 추가 정보를 제공하는 JSON 이름-값 페어 문자열입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.
+ `format` - 대상에 작성되는 데이터의 포맷입니다.
+ `formatOptions` - 대상 주소로 데이터를 구성하는 추가 옵션을 제공하는 JSON 이름-값 페어 문자열입니다. [데이터 포맷 옵션](aws-glue-programming-etl-format.md)을(를) 참조하세요.

`DataSink`을 반환합니다.

## def getSource
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getSource"></a>

```
def getSource( connectionType : String,
               connectionOptions : JsonOptions,
               transformationContext : String = ""
               pushDownPredicate
             ) : DataSource
```

Amazon S3, JDBC, AWS Glue Data Catalog 같은 소스에서 데이터를 읽는 [DataSource 특성](glue-etl-scala-apis-glue-datasource-trait.md)를 생성합니다. Kafka 및 Kinesis 스트리밍 데이터 원본도 지원합니다.
+ `connectionType` - 데이터 원본의 유형입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `connectionOptions` - 데이터 원본을 연결하려는 추가 정보를 제공하는 JSON 이름-값 페어 문자열입니다. 자세한 내용은 [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md) 섹션을 참조하세요.

  Kinesis 스트리밍 소스에는 `streamARN`, `startingPosition`, `inferSchema` 및 `classification` 연결 옵션이 필요합니다.

  Kafka 스트리밍 소스에는 `connectionName`, `topicName`, `startingOffsets`, `inferSchema` 및 `classification` 연결 옵션이 필요합니다.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.
+ `pushDownPredicate` - 파티션 열에 대한 조건자입니다.

`DataSource`을 반환합니다.

Amazon Kinesis 스트리밍 소스의 예:

```
val kinesisOptions = jsonOptions()
data_frame_datasource0 = glueContext.getSource("kinesis", kinesisOptions).getDataFrame()

private def jsonOptions(): JsonOptions = {
    new JsonOptions(
      s"""{"streamARN": "arn:aws:kinesis:eu-central-1:123456789012:stream/fromOptionsStream",
         |"startingPosition": "TRIM_HORIZON",
         |"inferSchema": "true",
         |"classification": "json"}""".stripMargin)
}
```

Kafka 스트리밍 소스의 예:

```
val kafkaOptions = jsonOptions()
val data_frame_datasource0 = glueContext.getSource("kafka", kafkaOptions).getDataFrame()

private def jsonOptions(): JsonOptions = {
    new JsonOptions(
      s"""{"connectionName": "ConfluentKafka",
         |"topicName": "kafka-auth-topic",
         |"startingOffsets": "earliest",
         |"inferSchema": "true",
         |"classification": "json"}""".stripMargin)
 }
```

## def getSourceWithFormat
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat"></a>

```
def getSourceWithFormat( connectionType : String,
                         options : JsonOptions,
                         transformationContext : String = "",
                         format : String = null,
                         formatOptions : JsonOptions = JsonOptions.empty
                       ) : DataSource
```

Amazon S3, JDBC, AWS Glue Data Catalog 같은 소스에서 데이터를 읽는 [DataSource 특성](glue-etl-scala-apis-glue-datasource-trait.md)를 생성하고, 소스에 저장된 데이터 포맷도 설정합니다.
+ `connectionType` - 데이터 원본의 유형입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `options` - 데이터 원본을 연결하려는 추가 정보를 제공하는 JSON 이름-값 페어 문자열입니다. [AWS Glue for Spark에서 ETL에 대한 연결 유형 및 옵션](aws-glue-programming-etl-connect.md)을(를) 참조하세요.
+ `transformationContext` - 작업 북마크에서 사용되는 싱크와 관련된 변환 컨텍스트입니다. 기본적으로 비우도록 설정합니다.
+ `format` - 소스에 저장된 데이터의 포맷입니다. `connectionType`이 "s3"일 경우에도 `format`을 지정할 수 있습니다. “avro”, “csv”, “grokLog”, “ion”, “json”, “xml”, “parquet”, “orc” 중 하나가 이에 해당합니다.
+ `formatOptions` - 소스로 데이터를 파싱하는 추가 옵션을 제공하는 JSON 이름-값 페어 문자열입니다. [데이터 포맷 옵션](aws-glue-programming-etl-format.md)을(를) 참조하세요.

`DataSource`을 반환합니다.

**예제**

Amazon S3에서 CSV(쉼표로 구분된 값) 파일인 데이터 원본에서 DynamicFrame을 생성합니다.

```
val datasource0 = glueContext.getSourceWithFormat(
    connectionType="s3",
    options =JsonOptions(s"""{"paths": [ "s3://csv/nycflights.csv"]}"""),
    transformationContext = "datasource0", 
    format = "csv",
    formatOptions=JsonOptions(s"""{"withHeader":"true","separator": ","}""")
    ).getDynamicFrame()
```

JDBC 연결을 사용하여 PostgreSQL인 데이터 원본에서 DynamicFrame을 생성합니다.

```
val datasource0 = glueContext.getSourceWithFormat(
    connectionType="postgresql",
    options =JsonOptions(s"""{
      "url":"jdbc:postgresql://databasePostgres-1.rds.amazonaws.com:5432/testdb",
      "dbtable": "public.company",
      "redshiftTmpDir":"", 
      "user":"username", 
      "password":"password123"
    }"""),
    transformationContext = "datasource0").getDynamicFrame()
```

JDBC 연결을 사용하여 MySQL인 데이터 원본에서 DynamicFrame을 생성합니다.

```
 val datasource0 = glueContext.getSourceWithFormat(
    connectionType="mysql",
    options =JsonOptions(s"""{
      "url":"jdbc:mysql://databaseMysql-1.rds.amazonaws.com:3306/testdb",
      "dbtable": "athenatest_nycflights13_csv",
      "redshiftTmpDir":"", 
      "user":"username", 
      "password":"password123"
    }"""),
    transformationContext = "datasource0").getDynamicFrame()
```

## def getSparkSession
<a name="glue-etl-scala-apis-glue-gluecontext-defs-getSparkSession"></a>

```
def getSparkSession : SparkSession 
```

이 GlueContext와 관련된 `SparkSession` 객체를 얻습니다. 이 SparkSession 객체를 사용하여 DynamicFrame에서 생성된 `DataFrame`을 사용할 테이블 및 UDF를 등록합니다.

SparkSession을 반환합니다.

## def startTransaction
<a name="glue-etl-scala-apis-glue-gluecontext-defs-start-transaction"></a>

```
def startTransaction(readOnly: Boolean):String
```

새 트랜잭션을 시작합니다. 내부적으로 Lake Formation [startTransaction](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-aws-lake-formation-api-transactions.html#aws-lake-formation-api-aws-lake-formation-api-transactions-StartTransaction) API를 호출합니다.
+ `readOnly` - (부울) 이 트랜잭션이 읽기 전용인지 또는 읽기/쓰기인지를 나타냅니다. 읽기 전용 트랜잭션 ID를 사용하여 수행된 쓰기는 거부됩니다. 읽기 전용 트랜잭션은 커밋할 필요가 없습니다.

트랜잭션 ID를 반환합니다.

## def commitTransaction
<a name="glue-etl-scala-apis-glue-gluecontext-defs-commit-transaction"></a>

```
def commitTransaction(transactionId: String, waitForCommit: Boolean): Boolean
```

지정된 트랜잭션을 커밋하려는 시도입니다. 트랜잭션이 커밋을 완료하기 전에 `commitTransaction`이 반환될 수 있습니다. 내부적으로 Lake Formation [commitTransaction](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-aws-lake-formation-api-transactions.html#aws-lake-formation-api-aws-lake-formation-api-transactions-CommitTransaction) API를 호출합니다.
+ `transactionId` - (문자열) 커밋할 트랜잭션입니다.
+ `waitForCommit` - (부울) `commitTransaction`이 즉시 반환되는지 여부를 결정합니다. 기본값은 true입니다. false인 경우 `commitTransaction`은 폴링한 후 트랜잭션이 커밋될 때까지 기다립니다. 대기 시간은 최대 재시도 횟수가 6회인 지수 백오프를 사용하여 1분으로 제한됩니다.

커밋이 수행되었는지 여부를 나타내는 부울을 반환합니다.

## def cancelTransaction
<a name="glue-etl-scala-apis-glue-gluecontext-defs-cancel-transaction"></a>

```
def cancelTransaction(transactionId: String): Unit
```

지정된 트랜잭션을 취소하려는 시도입니다. 내부적으로 Lake Formation [CancelTransaction](https://docs.aws.amazon.com/lake-formation/latest/dg/aws-lake-formation-api-aws-lake-formation-api-transactions.html#aws-lake-formation-api-aws-lake-formation-api-transactions-CancelTransaction) API를 호출합니다.
+ `transactionId` - (문자열) 취소할 트랜잭션입니다.

트랜잭션이 이전에 커밋된 경우 `TransactionCommittedException` 예외를 반환합니다.

## def this
<a name="glue-etl-scala-apis-glue-gluecontext-defs-this-1"></a>

```
def this( sc : SparkContext,
          minPartitions : Int,
          targetPartitions : Int )
```

지정된 `SparkContext`, 최소 파티션 및 대상 파티션을 사용하여 `GlueContext` 객체를 생성합니다.
+ `sc` - `SparkContext`
+ `minPartitions` - 파티션의 최소 수입니다.
+ `targetPartitions` - 파티션의 목표 수입니다.

`GlueContext`을 반환합니다.

## def this
<a name="glue-etl-scala-apis-glue-gluecontext-defs-this-2"></a>

```
def this( sc : SparkContext )
```

제공된 `SparkContext`로 `GlueContext` 객체를 생성합니다. 최소 파티션을 10으로 대상 파티션을 20으로 설정합니다.
+ `sc` - `SparkContext`

`GlueContext`을 반환합니다.

## def this
<a name="glue-etl-scala-apis-glue-gluecontext-defs-this-3"></a>

```
def this( sparkContext : JavaSparkContext )
```

제공된 `JavaSparkContext`로 `GlueContext` 객체를 생성합니다. 최소 파티션을 10으로 대상 파티션을 20으로 설정합니다.
+ `sparkContext` - `JavaSparkContext`

`GlueContext`을 반환합니다.

# MappingSpec
<a name="glue-etl-scala-apis-glue-mappingspec"></a>

**패키지:   com.amazonaws.services.glue**

## MappingSpec 케이스 클래스
<a name="glue-etl-scala-apis-glue-mappingspec-case-class"></a>

```
case class MappingSpec( sourcePath: SchemaPath,
                        sourceType: DataType,
                        targetPath: SchemaPath,
                        targetType: DataTyp
                       ) extends Product4[String, String, String, String] {
  override def _1: String = sourcePath.toString
  override def _2: String = ExtendedTypeName.fromDataType(sourceType)
  override def _3: String = targetPath.toString
  override def _4: String = ExtendedTypeName.fromDataType(targetType)
}
```
+ `sourcePath` - 소스 필드의 `SchemaPath`입니다.
+ `sourceType` - 소스 필드의 `DataType`입니다.
+ `targetPath` - 대상 필드의 `SchemaPath`입니다.
+ `targetType` - 대상 필드의 `DataType`입니다.

`MappingSpec`은 소스 경로 및 소스 데이터 유형에서 대상 경로 및 대상 데이터 유형까지의 매핑을 지정합니다. 소스 프레임의 소스 경로 값은 대상 경로의 대상 프레임에서 볼 수 있습니다. 소스 데이터 유형은 대상 데이터 유형으로 캐스팅됩니다.

`applyMapping` 인터페이스에서 `Product4`을 처리할 수 있도록 `Product4`에서 확장됩니다.

## MappingSpec 객체
<a name="glue-etl-scala-apis-glue-mappingspec-object"></a>

```
object MappingSpec
```

`MappingSpec` 객체에는 다음 멤버가 있습니다.

## Val orderingByTarget
<a name="glue-etl-scala-apis-glue-mappingspec-object-val-orderingbytarget"></a>

```
val orderingByTarget: Ordering[MappingSpec]
```



## 정의 적용
<a name="glue-etl-scala-apis-glue-mappingspec-object-defs-apply-1"></a>

```
def apply( sourcePath : String,
           sourceType : DataType,
           targetPath : String,
           targetType : DataType
         ) : MappingSpec
```

`MappingSpec`을 만듭니다.
+ `sourcePath` - 소스 경로의 문자열 표현입니다.
+ `sourceType` - 소스 `DataType`입니다.
+ `targetPath` - 대상 경로의 문자열 표현입니다.
+ `targetType` - 대상 `DataType`입니다.

`MappingSpec`을 반환합니다.

## 정의 적용
<a name="glue-etl-scala-apis-glue-mappingspec-object-defs-apply-2"></a>

```
def apply( sourcePath : String,
           sourceTypeString : String,
           targetPath : String,
           targetTypeString : String
         ) : MappingSpec
```

`MappingSpec`을 만듭니다.
+ `sourcePath` - 소스 경로의 문자열 표현입니다.
+ `sourceType` - 원본 데이터 유형의 문자열 표현입니다.
+ `targetPath` - 대상 경로의 문자열 표현입니다.
+ `targetType` - 대상 데이터 유형의 문자열 표현입니다.

MappingSpec을 반환합니다.

## 정의 적용
<a name="glue-etl-scala-apis-glue-mappingspec-object-defs-apply-3"></a>

```
def apply( product : Product4[String, String, String, String] ) : MappingSpec 
```

`MappingSpec`을 만듭니다.
+ `product` - 소스 경로, 원본 데이터 유형, 대상 경로 및 대상 데이터 유형의 `Product4`입니다.

`MappingSpec`을 반환합니다.

# AWS Glue Scala ResolveSpec API
<a name="glue-etl-scala-apis-glue-resolvespec"></a>

**Topics**
+ [ResolveSpec 객체](#glue-etl-scala-apis-glue-resolvespec-object)
+ [ResolveSpec 케이스 클래스](#glue-etl-scala-apis-glue-resolvespec-case-class)

**패키지:   com.amazonaws.services.glue**

## ResolveSpec 객체
<a name="glue-etl-scala-apis-glue-resolvespec-object"></a>

 **ResolveSpec**

```
object ResolveSpec
```

### def
<a name="glue-etl-scala-apis-glue-resolvespec-object-def-apply_1"></a>

```
def apply( path : String,
           action : String
         ) : ResolveSpec
```

`ResolveSpec`을 만듭니다.
+ `path` - 확인해야 할 선택 필드를 나타내는 문자열입니다.
+ `action` - 확인 작업입니다. `Project`, `KeepAsStruct` 또는 `Cast` 중 하나가 작업이 될 수 있습니다.

`ResolveSpec`을 반환합니다.

### def
<a name="glue-etl-scala-apis-glue-resolvespec-object-def-apply_2"></a>

```
def apply( product : Product2[String, String] ) : ResolveSpec 
```

`ResolveSpec`을 만듭니다.
+ `product` - 소스 경로, 확인 작업의 `Product2`입니다.

`ResolveSpec`을 반환합니다.

## ResolveSpec 케이스 클래스
<a name="glue-etl-scala-apis-glue-resolvespec-case-class"></a>

```
case class ResolveSpec extends Product2[String, String]  (
           path : SchemaPath,
           action : String )
```

`ResolveSpec`을 만듭니다.
+ `path` - 확인해야 할 선택 필드의 `SchemaPath`입니다.
+ `action` - 확인 작업입니다. `Project`, `KeepAsStruct` 또는 `Cast` 중 하나가 작업이 될 수 있습니다.

### ResolveSpec def 메서드
<a name="glue-etl-scala-apis-glue-resolvespec-case-class-defs"></a>

```
def _1 : String 
```

```
def _2 : String 
```

# AWS Glue Scala ArrayNode API
<a name="glue-etl-scala-apis-glue-types-arraynode"></a>

**패키지:   com.amazonaws.services.glue.types**

## ArrayNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-arraynode-case-class"></a>

 **ArrayNode**

```
case class ArrayNode extends DynamicNode  (
           value : ArrayBuffer[DynamicNode] )
```

### ArrayNode 정의 메서드
<a name="glue-etl-scala-apis-glue-types-arraynode-case-class-defs"></a>

```
def add( node : DynamicNode )
```

```
def clone
```

```
def equals( other : Any )
```

```
def get( index : Int ) : Option[DynamicNode] 
```

```
def getValue
```

```
def hashCode : Int 
```

```
def isEmpty : Boolean 
```

```
def nodeType
```

```
def remove( index : Int )
```

```
def this
```

```
def toIterator : Iterator[DynamicNode] 
```

```
def toJson : String 
```

```
def update( index : Int,
            node : DynamicNode )
```

# AWS Glue Scala BinaryNode API
<a name="glue-etl-scala-apis-glue-types-binarynode"></a>

**패키지:   com.amazonaws.services.glue.types**

## BinaryNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-binarynode-case-class"></a>

 **BinaryNode**

```
case class BinaryNode extends ScalarNode(value, TypeCode.BINARY)  (
           value : Array[Byte] )
```

### BinaryNode val 필드
<a name="glue-etl-scala-apis-glue-types-binarynode-case-class-vals"></a>
+ `ordering`

### BinaryNode 정의 메서드
<a name="glue-etl-scala-apis-glue-types-binarynode-case-class-defs"></a>

```
def clone
```

```
def equals( other : Any )
```

```
def hashCode : Int 
```

# AWS Glue Scala BooleanNode API
<a name="glue-etl-scala-apis-glue-types-booleannode"></a>

**패키지:   com.amazonaws.services.glue.types**

## BooleanNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-booleannode-case-class"></a>

 **BooleanNode**

```
case class BooleanNode extends ScalarNode(value, TypeCode.BOOLEAN)  (
           value : Boolean )
```

### BooleanNode val 필드
<a name="glue-etl-scala-apis-glue-types-booleannode-case-class-vals"></a>
+ `ordering`

### BooleanNode 정의 메서드
<a name="glue-etl-scala-apis-glue-types-booleannode-case-class-defs"></a>

```
def equals( other : Any )
```

# AWS Glue Scala ByteNode API
<a name="glue-etl-scala-apis-glue-types-bytenode"></a>

**패키지:   com.amazonaws.services.glue.types**

## ByteNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-bytenode-case-class"></a>

 **ByteNode**

```
case class ByteNode extends ScalarNode(value, TypeCode.BYTE)  (
           value : Byte )
```

### ByteNode val 필드
<a name="glue-etl-scala-apis-glue-types-bytenode-case-class-vals"></a>
+ `ordering`

### ByteNode 정의 메서드
<a name="glue-etl-scala-apis-glue-types-bytenode-case-class-defs"></a>

```
def equals( other : Any )
```

# AWS Glue Scala DateNode API
<a name="glue-etl-scala-apis-glue-types-datenode"></a>

**패키지:   com.amazonaws.services.glue.types**

## DateNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-datenode-case-class"></a>

 **DateNode**

```
case class DateNode extends ScalarNode(value, TypeCode.DATE)  (
           value : Date )
```

### DateNode val 필드
<a name="glue-etl-scala-apis-glue-types-datenode-case-class-vals"></a>
+ `ordering`

### ByteNode def 메서드
<a name="glue-etl-scala-apis-glue-types-datenode-case-class-defs"></a>

```
def equals( other : Any )
```

```
def this( value : Int )
```

# AWS Glue Scala DecimalNode API
<a name="glue-etl-scala-apis-glue-types-decimalnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## DecimalNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-decimalnode-case-class"></a>

 **DecimalNode**

```
case class DecimalNode extends ScalarNode(value, TypeCode.DECIMAL)  (
           value : BigDecimal )
```

### DecimalNode val 필드
<a name="glue-etl-scala-apis-glue-types-decimalnode-case-class-vals"></a>
+ `ordering`

### DecimalNode def 메서드
<a name="glue-etl-scala-apis-glue-types-decimalnode-case-class-defs"></a>

```
def equals( other : Any )
```

```
def this( value : Decimal )
```

# AWS Glue Scala DoubleNode API
<a name="glue-etl-scala-apis-glue-types-doublenode"></a>

**패키지:   com.amazonaws.services.glue.types**

## DoubleNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-doublenode-case-class"></a>

 **DoubleNode**

```
case class DoubleNode extends ScalarNode(value, TypeCode.DOUBLE)  (
           value : Double )
```

### DoubleNode val 필드
<a name="glue-etl-scala-apis-glue-types-doublenode-case-class-vals"></a>
+ `ordering`

### DoubleNode def 메서드
<a name="glue-etl-scala-apis-glue-types-doublenode-case-class-defs"></a>

```
def equals( other : Any )
```

# AWS Glue Scala DynamicNode API
<a name="glue-etl-scala-apis-glue-types-dynamicnode"></a>

**Topics**
+ [DynamicNode 클래스](#glue-etl-scala-apis-glue-types-dynamicnode-class)
+ [DynamicNode 객체](#glue-etl-scala-apis-glue-types-dynamicnode-object)

**패키지:   com.amazonaws.services.glue.types**

## DynamicNode 클래스
<a name="glue-etl-scala-apis-glue-types-dynamicnode-class"></a>

**DynamicNode**

```
class DynamicNode extends Serializable with Cloneable 
```

### DynamicNode def 메서드
<a name="glue-etl-scala-apis-glue-types-dynamicnode-class-defs"></a>

```
def getValue : Any
```

플레인 값을 가져오며 현재 레코드에 바인딩됩니다.

```
def nodeType : TypeCode
```

```
def toJson : String
```

디버깅 방법

```
def toRow( schema : Schema,
           options : Map[String, ResolveOption]
         ) : Row
```

```
def typeName : String 
```

## DynamicNode 객체
<a name="glue-etl-scala-apis-glue-types-dynamicnode-object"></a>

 **DynamicNode**

```
object DynamicNode
```

### DynamicNode def 메서드
<a name="glue-etl-scala-apis-glue-types-dynamicnode-object-defs"></a>

```
def quote( field : String,
           useQuotes : Boolean
         ) : String
```

```
def quote( node : DynamicNode,
           useQuotes : Boolean
         ) : String
```

# EvaluateDataQuality 클래스
<a name="glue-etl-scala-apis-glue-dq-EvaluateDataQuality"></a>


|  | 
| --- |
|  AWS Glue 데이터 품질은 AWS Glue의 미리 보기 릴리스이므로 변경될 수 있습니다. | 

**패키지: com.amazonaws.services.glue.dq**

```
object EvaluateDataQuality
```

## def apply
<a name="glue-etl-scala-apis-glue-dq-EvaluateDataQuality-defs-apply"></a>

```
def apply(frame: DynamicFrame,
            ruleset: String,
            publishingOptions: JsonOptions = JsonOptions.empty): DynamicFrame
```

`DynamicFrame`을 기준으로 데이터 품질 규칙 세트를 평가하고 새 `DynamicFrame`을 평가 결과와 함께 반환합니다. AWS Glue 데이터 품질에 대한 자세한 내용은 [AWS Glue Data Quality](glue-data-quality.md) 섹션을 참조하세요.
+ `frame` - 데이터 품질을 평가하려는 `DynamicFrame`입니다.
+ `ruleset` - 문자열 형식의 DQDL(데이터 품질 정의 언어) 규칙 세트입니다. DQDL에 대한 자세한 내용은 [데이터 품질 정의 언어(DQDL) 참조](dqdl.md) 안내서를 참조하세요.
+ `publishingOptions` - 평가 결과 및 지표를 게시하기 위해 다음 옵션을 지정하는 사전입니다.
  + `dataQualityEvaluationContext` - AWS Glue가 Amazon CloudWatch 지표와 데이터 품질 결과를 게시할 네임스페이스를 지정하는 문자열입니다. 집계된 지표는 CloudWatch에 표시되고 전체 결과는 AWS Glue Studio 인터페이스에 표시됩니다.
    + 필수 여부: 아니요
    + 기본 값: `default_context`
  + `enableDataQualityCloudWatchMetrics` - 데이터 품질 평가 결과를 CloudWatch에 게시할지 여부를 지정합니다. `dataQualityEvaluationContext` 옵션을 사용하여 지표의 네임스페이스를 지정합니다.
    + 필수 여부: 아니요
    + 기본값: False
  + `enableDataQualityResultsPublishing` - AWS Glue Studio 인터페이스의 **Data Quality**(데이터 품질) 탭에 데이터 품질 결과를 표시할지 여부를 지정합니다.
    + 필수 여부: 아니요
    + 기본값: True
  + `resultsS3Prefix` - AWS Glue가 데이터 품질 평가 결과를 기록할 수 있는 Amazon S3 위치를 지정합니다.
    + 필수 여부: 아니요
    + 기본값: ""(빈 문자열)

## 예시
<a name="glue-etl-scala-apis-glue-dq-EvaluateDataQuality-example"></a>

다음 예제 코드는`SelectFields` 변환을 수행하기 전에 `DynamicFrame`의 데이터 품질을 평가하는 방법을 보여줍니다. 스크립트는 변환을 시도하기 전에 모든 데이터 품질 규칙이 통과하는지 확인합니다.

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._
import com.amazonaws.services.glue.dq.EvaluateDataQuality

object GlueApp {
  def main(sysArgs: Array[String]) {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    // @params: [JOB_NAME]
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    // Create DynamicFrame with data
    val Legislators_Area = glueContext.getCatalogSource(database="legislators", tableName="areas_json", transformationContext="S3bucket_node1").getDynamicFrame()

    // Define data quality ruleset
    val DQ_Ruleset = """
      Rules = [ColumnExists "id"]
    """

    // Evaluate data quality
    val DQ_Results = EvaluateDataQuality.apply(frame=Legislators_Area, ruleset=DQ_Ruleset, publishingOptions=JsonOptions("""{"dataQualityEvaluationContext": "Legislators_Area", "enableDataQualityMetrics": "true", "enableDataQualityResultsPublishing": "true"}"""))
    assert(DQ_Results.filter(_.getField("Outcome").contains("Failed")).count == 0, "Failing DQ rules for Legislators_Area caused the job to fail.")

    // Script generated for node Select Fields
    val SelectFields_Results = Legislators_Area.selectFields(paths=Seq("id", "name"), transformationContext="Legislators_Area")

    Job.commit()
  }
}
```

# AWS Glue Scala FloatNode API
<a name="glue-etl-scala-apis-glue-types-floatnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## FloatNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-floatnode-case-class"></a>

**FloatNode**

```
case class FloatNode extends ScalarNode(value, TypeCode.FLOAT)  (
           value : Float )
```

### FloatNode val 필드
<a name="glue-etl-scala-apis-glue-types-floatnode-case-class-vals"></a>
+ `ordering`

### FloatNode def 메서드
<a name="glue-etl-scala-apis-glue-types-floatnode-case-class-defs"></a>

```
def equals( other : Any )
```

# FillMissingValues 클래스
<a name="glue-etl-scala-apis-glue-ml-fillmissingvalues"></a>

**패키지: com.amazonaws.services.glue.ml**

```
object FillMissingValues
```

## def apply
<a name="glue-etl-scala-apis-glue-ml-fillmissingvalues-defs-apply"></a>

```
def apply(frame: DynamicFrame,
          missingValuesColumn: String,
          outputColumn: String = "",
          transformationContext: String = "",
          callSite: CallSite = CallSite("Not provided", ""),
          stageThreshold: Long = 0,
          totalThreshold: Long = 0): DynamicFrame
```

지정된 열에 동적 프레임의 누락된 값을 채우고 새 열에 추정 값과 함께 새 프레임을 반환합니다. 누락된 값이 없는 행의 경우 지정된 열의 값이 새 열에 복제됩니다.
+ `frame` - 누락된 값을 채울 DynamicFrame입니다. 필수 사항입니다.
+ `missingValuesColumn` - 누락된 값(`null` 값 및 빈 문자열)이 포함된 열입니다. 필수 사항입니다.
+ `outputColumn` - 값이 누락된 모든 행에 대한 예상 값을 포함할 새 열의 이름입니다. 선택 사항이며 기본값은 `"_filled"`가 접미사로 사용된 `missingValuesColumn`의 값입니다.
+ `transformationContext` - 고유 문자열을 통해 상태 정보를 확인합니다(선택 사항).
+ `callSite` - 오류 보고에 필요한 컨텍스트 정보를 제공하는 데 사용합니다(선택 사항).
+ `stageThreshold` - 오류가 발생하기 전까지 변환에 따라 생길 수 있는 최대 오류 수입니다(선택 사항, 기본값은 0).
+ `totalThreshold` - 오류가 진행되기 전까지 생길 수 있는 최대 전체 오류 수입니다(선택 사항, 기본값은 0).

누락된 값이 있는 행에 대한 추정 값과 다른 행에 대한 현재 값이 포함된 하나의 추가 열이 있는 새 동적 프레임을 반환합니다.

# FindMatches 클래스
<a name="glue-etl-scala-apis-glue-ml-findmatches"></a>

**패키지: com.amazonaws.services.glue.ml**

```
object FindMatches
```

## def apply
<a name="glue-etl-scala-apis-glue-ml-findmatches-defs-apply"></a>

```
def apply(frame: DynamicFrame,
            transformId: String,
            transformationContext: String = "",
            callSite: CallSite = CallSite("Not provided", ""),
            stageThreshold: Long = 0,
            totalThreshold: Long = 0,
            enforcedMatches: DynamicFrame = null): DynamicFrame,
			computeMatchConfidenceScores: Boolean
```

입력 프레임에서 일치 항목을 찾고 일치 그룹당 고유 ID를 포함하는 새 열이 있는 새 프레임을 반환합니다.
+ `frame` - 일치하는 항목을 찾을 DynamicFrame입니다. 필수 사항입니다.
+ `transformId` - 입력 프레임에 적용할 FindMatches 변환과 연결된 고유 ID입니다. 필수 사항입니다.
+ `transformationContext` - 이 `DynamicFrame`의 식별자입니다. `transformationContext`는 실행 간 지속되는 작업 북마크 상태에 대한 키로 사용됩니다. 선택 사항.
+ `callSite` - 오류 보고에 필요한 컨텍스트 정보를 제공하는 데 사용합니다. Python에서 호출 할 때 자동으로 이 값이 설정됩니다. 선택 사항.
+ `stageThreshold` - 예외가 발생하기 전에 이 `DynamicFrame` 계산에 허용되는 오류 레코드의 최대 개수입니다(이전 `DynamicFrame`에 존재하는 레코드 제외). 선택 사항. 기본값은 0입니다.
+ `totalThreshold` - 예외가 발생하기 전 전체 오류 레코드의 최대 개수입니다(이전 프레임의 레코드 포함). 선택 사항. 기본값은 0입니다.
+ `enforcedMatches` - 강제 일치 항목에 대한 프레임입니다. 선택 사항. 기본값은 `null`입니다.
+ `computeMatchConfidenceScores` - 각 일치 레코드 그룹의 신뢰도 점수를 컴퓨팅할지 여부를 나타내는 부울 값입니다. 선택 사항. 기본값은 false입니다.

일치하는 레코드의 각 그룹에 고유 식별자가 할당된 새 동적 프레임을 반환합니다.

# FindIncrementalMatches 클래스
<a name="glue-etl-scala-apis-glue-ml-findincrementalmatches"></a>

**패키지: com.amazonaws.services.glue.ml**

```
object FindIncrementalMatches
```

## def apply
<a name="glue-etl-scala-apis-glue-ml-findincrementalmatches-defs-apply"></a>

```
apply(existingFrame: DynamicFrame,
            incrementalFrame: DynamicFrame,
            transformId: String,
            transformationContext: String = "",
            callSite: CallSite = CallSite("Not provided", ""),
            stageThreshold: Long = 0,
            totalThreshold: Long = 0,
            enforcedMatches: DynamicFrame = null): DynamicFrame,
			computeMatchConfidenceScores: Boolean
```

기존 및 증분 프레임에서 일치 항목을 찾고 일치 그룹당 고유 ID가 포함된 열이 있는 새 프레임을 반환합니다.
+ `existingframe` - 각 그룹에 대해 일치하는 ID가 할당된 기존 프레임입니다. 필수 사항입니다.
+ `incrementalframe` - 기존 프레임과 일치하는 항목을 찾는 데 사용되는 증분 프레임입니다. 필수 사항입니다.
+ `transformId` - 입력 프레임에 적용할 FindIncrementalMatches 변환과 연결된 고유 ID입니다. 필수 사항입니다.
+ `transformationContext` - 이 `DynamicFrame`의 식별자입니다. `transformationContext`는 실행 간 지속되는 작업 북마크 상태에 대한 키로 사용됩니다. 선택 사항.
+ `callSite` - 오류 보고에 필요한 컨텍스트 정보를 제공하는 데 사용합니다. Python에서 호출 할 때 자동으로 이 값이 설정됩니다. 선택 사항.
+ `stageThreshold` - 예외가 발생하기 전에 이 `DynamicFrame` 계산에 허용되는 오류 레코드의 최대 개수입니다(이전 `DynamicFrame`에 존재하는 레코드 제외). 선택 사항. 기본값은 0입니다.
+ `totalThreshold` - 예외가 발생하기 전 전체 오류 레코드의 최대 개수입니다(이전 프레임의 레코드 포함). 선택 사항. 기본값은 0입니다.
+ `enforcedMatches` - 강제 일치 항목에 대한 프레임입니다. 선택 사항. 기본값은 `null`입니다.
+ `computeMatchConfidenceScores` - 각 일치 레코드 그룹의 신뢰도 점수를 컴퓨팅할지 여부를 나타내는 부울 값입니다. 선택 사항. 기본값은 false입니다.

일치하는 레코드의 각 그룹에 고유 식별자가 할당된 새 동적 프레임을 반환합니다.

# AWS Glue Scala IntegerNode API
<a name="glue-etl-scala-apis-glue-types-integernode"></a>

**패키지:   com.amazonaws.services.glue.types**

## IntegerNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-integernode-case-class"></a>

**IntegerNode**

```
case class IntegerNode extends ScalarNode(value, TypeCode.INT)  (
           value : Int )
```

### IntegerNode val 필드
<a name="glue-etl-scala-apis-glue-types-integernode-case-class-vals"></a>
+ `ordering`

### IntegerNode def 메서드
<a name="glue-etl-scala-apis-glue-types-integernode-case-class-defs"></a>

```
def equals( other : Any )
```

# AWS Glue Scala LongNode API
<a name="glue-etl-scala-apis-glue-types-longnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## LongNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-longnode-case-class"></a>

 **LongNode**

```
case class LongNode extends ScalarNode(value, TypeCode.LONG)  (
           value : Long )
```

### LongNode val 필드
<a name="glue-etl-scala-apis-glue-types-longnode-case-class-vals"></a>
+ `ordering`

### LongNode def 메서드
<a name="glue-etl-scala-apis-glue-types-longnode-case-class-defs"></a>

```
def equals( other : Any )
```

# AWS Glue Scala MapLikeNode API
<a name="glue-etl-scala-apis-glue-types-maplikenode"></a>

**패키지:   com.amazonaws.services.glue.types**

## MapLikeNode 클래스
<a name="glue-etl-scala-apis-glue-types-maplikenode-class"></a>

**MapLikeNode**

```
class MapLikeNode extends DynamicNode  (
           value : mutable.Map[String, DynamicNode] )
```

### MapLikeNode def 메서드
<a name="glue-etl-scala-apis-glue-types-maplikenode-class-defs"></a>

```
def clear : Unit 
```

```
def get( name : String ) : Option[DynamicNode] 
```

```
def getValue
```

```
def has( name : String ) : Boolean 
```

```
def isEmpty : Boolean 
```

```
def put( name : String,
         node : DynamicNode
       ) : Option[DynamicNode]
```

```
def remove( name : String ) : Option[DynamicNode] 
```

```
def toIterator : Iterator[(String, DynamicNode)] 
```

```
def toJson : String 
```

```
def toJson( useQuotes : Boolean ) : String 
```

**예제:** 이 JSON을 고려할 때 

```
{"foo": "bar"}
```

`useQuotes == true`이면 `toJson`이 `{"foo": "bar"}`를 생성합니다. `useQuotes == false`이면 `toJson`이 `{foo: bar}` @return을 생성합니다. 

# AWS Glue Scala MapNode API
<a name="glue-etl-scala-apis-glue-types-mapnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## MapNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-mapnode-case-class"></a>

 **MapNode**

```
case class MapNode extends MapLikeNode(value)  (
           value : mutable.Map[String, DynamicNode] )
```

### MapNode def 메서드
<a name="glue-etl-scala-apis-glue-types-mapnode-case-class-defs"></a>

```
def clone
```

```
def equals( other : Any )
```

```
def hashCode : Int 
```

```
def nodeType
```

```
def this
```

# AWS Glue Scala NullNode API
<a name="glue-etl-scala-apis-glue-types-nullnode"></a>

**Topics**
+ [NullNode 클래스](#glue-etl-scala-apis-glue-types-nullnode-class)
+ [NullNode 케이스 객체](#glue-etl-scala-apis-glue-types-nullnode-case-object)

**패키지:   com.amazonaws.services.glue.types**

## NullNode 클래스
<a name="glue-etl-scala-apis-glue-types-nullnode-class"></a>

 **NullNode**

```
class NullNode
```

## NullNode 케이스 객체
<a name="glue-etl-scala-apis-glue-types-nullnode-case-object"></a>

 **NullNode**

```
case object NullNode extends NullNode 
```

# AWS Glue Scala ObjectNode API
<a name="glue-etl-scala-apis-glue-types-objectnode"></a>

**Topics**
+ [ObjectNode 객체](#glue-etl-scala-apis-glue-types-objectnode-object)
+ [ObjectNode 케이스 클래스](#glue-etl-scala-apis-glue-types-objectnode-case-class)

**패키지:   com.amazonaws.services.glue.types**

## ObjectNode 객체
<a name="glue-etl-scala-apis-glue-types-objectnode-object"></a>

**ObjectNode**

```
object ObjectNode
```

### ObjectNode def 메서드
<a name="glue-etl-scala-apis-glue-types-objectnode-object-defs"></a>

```
def apply( frameKeys : Set[String],
           v1 : mutable.Map[String, DynamicNode],
           v2 : mutable.Map[String, DynamicNode],
           resolveWith : String
         ) : ObjectNode
```

## ObjectNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-objectnode-case-class"></a>

 **ObjectNode**

```
case class ObjectNode extends MapLikeNode(value)  (
           val value : mutable.Map[String, DynamicNode] )
```

### ObjectNode def 메서드
<a name="glue-etl-scala-apis-glue-types-objectnode-case-class-defs"></a>

```
def clone
```

```
def equals( other : Any )
```

```
def hashCode : Int 
```

```
def nodeType
```

```
def this
```

# AWS Glue Scala ScalarNode API
<a name="glue-etl-scala-apis-glue-types-scalarnode"></a>

**Topics**
+ [ScalarNode 클래스](#glue-etl-scala-apis-glue-types-scalarnode-class)
+ [ScalarNode 객체](#glue-etl-scala-apis-glue-types-scalarnode-object)

**패키지:   com.amazonaws.services.glue.types**

## ScalarNode 클래스
<a name="glue-etl-scala-apis-glue-types-scalarnode-class"></a>

**ScalarNode**

```
class ScalarNode extends DynamicNode  (
           value : Any,
           scalarType : TypeCode )
```

### ScalarNode def 메서드
<a name="glue-etl-scala-apis-glue-types-scalarnode-class-defs"></a>

```
def compare( other : Any,
             operator : String
           ) : Boolean
```

```
def getValue
```

```
def hashCode : Int 
```

```
def nodeType
```

```
def toJson
```

## ScalarNode 객체
<a name="glue-etl-scala-apis-glue-types-scalarnode-object"></a>

 **ScalarNode**

```
object ScalarNode
```

### ScalarNode def 메서드
<a name="glue-etl-scala-apis-glue-types-scalarnode-object-defs"></a>

```
def apply( v : Any ) : DynamicNode 
```

```
def compare( tv : Ordered[T],
             other : T,
             operator : String
           ) : Boolean
```

```
def compareAny( v : Any,
                y : Any,
                o : String )
```

```
def withEscapedSpecialCharacters( jsonToEscape : String ) : String 
```

# AWS Glue Scala ShortNode API
<a name="glue-etl-scala-apis-glue-types-shortnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## ShortNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-shortnode-case-class"></a>

**ShortNode**

```
case class ShortNode extends ScalarNode(value, TypeCode.SHORT)  (
           value : Short )
```

### ShortNode val 필드
<a name="glue-etl-scala-apis-glue-types-shortnode-case-class-vals"></a>
+ `ordering`

### ShortNode def 메서드
<a name="glue-etl-scala-apis-glue-types-shortnode-case-class-defs"></a>

```
def equals( other : Any )
```

# AWS Glue Scala StringNode API
<a name="glue-etl-scala-apis-glue-types-stringnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## StringNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-stringnode-case-class"></a>

 **StringNode**

```
case class StringNode extends ScalarNode(value, TypeCode.STRING)  (
           value : String )
```

### StringNode val 필드
<a name="glue-etl-scala-apis-glue-types-stringnode-case-class-vals"></a>
+ `ordering`

### StringNode def 메서드
<a name="glue-etl-scala-apis-glue-types-stringnode-case-class-defs"></a>

```
def equals( other : Any )
```

```
def this( value : UTF8String )
```

# AWS Glue Scala TimestampNode API
<a name="glue-etl-scala-apis-glue-types-timestampnode"></a>

**패키지:   com.amazonaws.services.glue.types**

## TimestampNode 케이스 클래스
<a name="glue-etl-scala-apis-glue-types-timestampnode-case-class"></a>

**TimestampNode**

```
case class TimestampNode extends ScalarNode(value, TypeCode.TIMESTAMP)  (
           value : Timestamp )
```

### TimestampNode val 필드
<a name="glue-etl-scala-apis-glue-types-timestampnode-case-class-vals"></a>
+ `ordering`

### TimestampNode def 메서드
<a name="glue-etl-scala-apis-glue-types-timestampnode-case-class-defs"></a>

```
def equals( other : Any )
```

```
def this( value : Long )
```

# AWS Glue Scala GlueArgParser API
<a name="glue-etl-scala-apis-glue-util-glueargparser"></a>

**패키지:   com.amazonaws.services.glue.util**

## GlueArgParser 객체
<a name="glue-etl-scala-apis-glue-util-glueargparser-object"></a>

**GlueArgParser**

```
object GlueArgParser
```

이것은 `AWSGlueDataplanePython` 패키지에 있는 `utils.getResolvedOptions`의 Python 버전과 엄격하게 일치합니다.

### GlueArgParser def 메서드
<a name="glue-etl-scala-apis-glue-util-glueargparser-object-defs"></a>

```
def getResolvedOptions( args : Array[String],
                        options : Array[String]
                      ) : Map[String, String]
```

```
def initParser( userOptionsSet : mutable.Set[String] ) : ArgumentParser 
```

**Example 작업으로 전달된 인수 검색**  
작업 인수를 검색하려면 `getResolvedOptions` 메서드를 사용할 수 있습니다. `aws_region` 작업 인수를 검색하는 다음 예제를 검토합니다.  

```
val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME","aws_region").toArray)
Job.init(args("JOB_NAME"), glueContext, args.asJava)
val region = args("aws_region")
println(region)
```

# AWS Glue Scala 작업 API
<a name="glue-etl-scala-apis-glue-util-job"></a>

**패키지:   com.amazonaws.services.glue.util**

## 작업 객체
<a name="glue-etl-scala-apis-glue-util-job-object"></a>

 **작업**

```
object Job
```

### 작업 def 메서드
<a name="glue-etl-scala-apis-glue-util-job-object-defs"></a>

```
def commit
```

```
def init( jobName : String,
          glueContext : GlueContext,
          args : java.util.Map[String, String] = Map[String, String]().asJava
        ) : this.type
```

```
def init( jobName : String,
          glueContext : GlueContext,
          endpoint : String,
          args : java.util.Map[String, String]
        ) : this.type
```

```
def isInitialized
```

```
def reset
```

```
def runId
```