

# ジョブスクリプトの編集またはアップロード
<a name="edit-nodes-script"></a>

AWS Glue Studio のビジュアルエディタを使用して、ジョブスクリプトを編集したり、独自のスクリプトをアップロードします。

ジョブが AWS Glue Studio で作成された場合にのみ、ビジュアルエディタを使用してジョブノードを編集できます。 AWS Glue コンソールをAPI コマンドを通して、またはコマンドラインインターフェイス (CLI) を使用してジョブが作成された場合、AWS Glue Studio 中のスクリプトエディタを使用して、ジョブスクリプト、パラメータ、スケジュールを編集できます。ジョブをスクリプト専用モードに変換して、AWS Glue Studio 内に作成されたジョブのスクリプトを編集することもできます。

**ジョブスクリプトを編集または独自のスクリプトをアップロードするには**

1. 新しいジョブを作成する場合、[**Jobs**] (ジョブ) ページで、[**Spark script editor**] (Spark スクリプトエディタ) オプションを選択して Spark ジョブを作成するか、[**Python Shell script editor**] (Python シェルスクリプトエディタ) を選択して Python シェルジョブを作成します。新しいスクリプトを作成するか、既存のスクリプトをアップロードできます。[**Spark script editor**] (Spark スクリプトエディタ) を選択した場合、Scala スクリプトまたは Python スクリプトのいずれかを作成またはアップロードできます。[**Python Shell script editor**] (Python シェルスクリプトエディタ) を選択した場合、Python スクリプトの作成またはアップロードのみが可能です。

   新しいジョブを作成するオプションを選択した後、表示される [**Options**] (オプション) セクションで、スタータースクリプト (**定型コードを含む新しいスクリプトを作成**) から開始するか、ジョブスクリプトとして使用するローカルファイルをアップロードするかを選択できます。

   [**Spark script editor**] (Spark スクリプトエディタ) を選択した場合、Python または Scala スクリプトファイルのどちらかをアップロードできます。Scala スクリプトには、ファイル拡張子 `.scala` が必要です。Python スクリプトは、Python タイプのファイルとして認識される必要があります。[**Python Shell script editor**] (Python シェルスクリプトエディタ) を選択した場合、Python スクリプトファイルのみをアップロードできます。

   選択が完了したら、[**Create**] (作成) をクリックしてジョブを作成し、ビジュアルエディタを開きます。

1. 新規または保存済みのジョブのビジュアルジョブエディタに移動して、[**Script**] (スクリプト) タブを選択します。

1. スクリプトエディタのオプションを使用して新しいジョブを作成しておらず、既存のジョブのスクリプトを編集したことがない場合、[**Script**] (スクリプト) タブには、[**Script (Locked)**] (スクリプト (ロックされています)) という見出しが表示されます。これは、スクリプトエディタが読み取り専用モードであることを意味します。[**Edit script**] (スクリプトの編集) を選択して、編集用のスクリプトのロックを解除します。

   スクリプトを編集可能にするには、AWS Glue Studio がジョブをビジュアルジョブからスクリプト専用ジョブに変換します。編集用にスクリプトをロック解除すると、保存後にこのジョブでビジュアルエディタを使用できなくなります。

   確認ウィンドウで、[**Confirm**] (確認) を選択して続行するか、[**Cancel**] (キャンセル) を選択して引き続きビジュアルの編集にジョブを使用します。

   [**Confirm**] (確認) を選択すると、[**Visual**] (ビジュアル) タブはエディタに表示されなくなります。AWS Glue Studio を使って、スクリプトエディタを使用したスクリプトを変更したり、ジョブの詳細やスケジュールを変更したり、実行中のジョブを表示したりできます。
**注記**  
ジョブを保存するまで、スクリプト専用ジョブへの変換は永続的ではありません。コンソールのウェブページを更新したり、ビジュアルエディタでジョブを保存する前に閉じて再度開いても、ビジュアルエディタで個々のノードを編集できます。

1. 必要に応じて、スクリプトを編集します。

   スクリプトの編集が終了したら、[**Save**] (保存) をクリックしてジョブを保存し、ジョブをビジュアルからスクリプト専用に永続的に変換します。

1. (オプション)[**Script**] タブ 上の[**Download**]ボタンを選択することにより、AWS Glue Studio コンソールからのスクリプトをダウンロードできます。このボタンをクリックすると、新しいブラウザウィンドウが開き、Amazon S3 内にあるその場所からのスクリプトが表示されます。[**Job details**] (ジョブの詳細) タブの [**Script filename**] (スクリプトファイル名) および [**Script path**] (スクリプトパス) パラメータにより、Amazon S3 のスクリプトファイルの名前と場所が決定します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/images/job-details-script-location-params-screenshot.png)

   ジョブを保存すると、AWS Glue によりこれらのフィールドで指定された場所にジョブスクリプトが保存されます。Amazon S3 内のこの場所にあるスクリプトファイルを変更すると、AWS Glue Studio は次回ジョブを編集するときに、変更されたスクリプトをロードします。

## AWS Glue Studio 中の Scala スクリプトの作成および編集
<a name="edit-job-scala-script"></a>

ジョブの作成のためにスクリプトエディタを選択する場合、デフォルトでは、ジョブのプログラミング言語は `Python 3` に設定されています。スクリプトをアップロードするのではなく、新しいスクリプトの記述を選択した場合、AWS Glue Studio は、Python 内に記述された定型テキストを用いて新しいスクリプトを開始します。Scala スクリプトを記述する場合は、Scala を使用するよう最初にスクリプトエディタを設定する必要があります。

**注記**  
ジョブのプログラミング言語として Scala を選択し、ビジュアルエディタを使用してジョブを設計する場合、生成されるジョブスクリプトは Scala で記述されます。それ以上のアクションは必要ありません。

**AWS Glue Studio 中の新しい Scala スクリプトの作成**

1. [**Spark script editor**] (Spark スクリプトエディタ) オプションを選択して、新しいジョブを作成します。

1. [**Options**] (オプション) の、[**Create a new script with boilerplate code**] (定型コードで新しいスクリプトを作成する) を選択します。

1. [**Job details**] (ジョブの詳細) タブを選択し、[**Language**] (言語) を [`Scala`] (`Python 3` ではなく) に設定します。
**注記**  
[**Spark script editor**] (Spark スクリプトエディタ) オプションを選択してジョブを作成すると、ジョブの [**Type**] (タイプ) プロパティは `Spark` に自動的に設定されます。

1. [**Script**] (スクリプト) タブを選択します。

1. Python の定型テキストを削除します。これを、次の Scala の定型テキストに置き換えることができます。

   ```
   import com.amazonaws.services.glue.{DynamicRecord, GlueContext}
   import org.apache.spark.SparkContext
   import com.amazonaws.services.glue.util.JsonOptions
   import com.amazonaws.services.glue.util.GlueArgParser
   import com.amazonaws.services.glue.util.Job
   
   object MyScript {
     def main(args: Array[String]): Unit = {
       val sc: SparkContext = new SparkContext()
       val glueContext: GlueContext = new GlueContext(sc)
   
       }
   }
   ```

1. エディタで Scala ジョブスクリプトを記述します。必要に応じて、他の `import` ステートメントを追加します。

## AWS Glue Studio 中の Python シェルジョブの作成および編集
<a name="edit-job-python-shell"></a>

ジョブの作成に Python シェルスクリプトエディタを選択すると、既存の Python スクリプトをアップロードするか、新しい Python スクリプトを記述できます。新しいスクリプトを作成する場合、定型コードが新しい Python ジョブスクリプトに追加されます。

**新しい Python シェルジョブを作成するには**  
「[AWS Glue Studio でのジョブの開始](edit-nodes-chapter.md#create-jobs-start)」の手順を参照してください。

Python シェルジョブでサポートされているジョブプロパティは、Spark ジョブでサポートされているものとは異なります。次のリストは、[**Job details**] (ジョブの詳細) タブでの、Python シェルジョブで使用可能なジョブパラメータの変更について示しています。
+ ジョブの [**Type**] (タイプ) プロパティは自動的に [`Python Shell`] に設定され、変更はできません。
+ [**Language**] (言語) の代わりに、ジョブ用の [**Python version**] (Python バージョン) プロパティがあります。現在、AWS Glue Studio で作成される Python シェルジョブは Python 3.6 を使用します。
+ [**Glue version**] (Glue バージョン) プロパティは Python シェルジョブには適用されないため、使用できません。
+ [**Worker type**] (ワーカータイプ) および [**Number of workers**] (ワーカー数) の代わりに、[**Data processing units**] (データ処理ユニット) プロパティが表示されます。このジョブプロパティにより、ジョブの実行時に Python シェルによって消費されるデータ処理ユニット (DPU) の数が決定します。
+ [**Job bookmark**] (ジョブのブックマーク) プロパティは Python シェルジョブではサポートされていないため、使用できません。
+ [**Advanced properties**] (詳細プロパティ) の次のプロパティは Python シェルジョブでは使用できません。
  + **ジョブのメトリクス**
  + **連続ログ記録**
  + [**Spark UI**] および [**Spark UI logs path**] (Spark UI ログパス)
  + 見出し [**Libraries**] (ライブラリ) の下の [**依存 JARS パス**]