チュートリアル: 開発エンドポイントで REPL シェルを使用する - AWS Glue

チュートリアル: 開発エンドポイントで REPL シェルを使用する

AWS Glue では、開発エンドポイントを作成してから、REPL (Read-Evaluate-Print Loop) シェルを呼び出して PySpark コードを増分的に実行し、ETL スクリプトをデプロイする前にインタラクティブにデバッグできるようにします。

このチュートリアルでは、「チュートリアルの前提条件」にまとめられているステップが実行済みであることを前提としています。

  1. AWS Glue コンソールで [Dev endpoints (開発エンドポイント)] を選択して、開発エンドポイントのリストに移動します。開発エンドポイントの名前を選択して詳細ページを開きます。

  2. [SSH to Python REPL] (Python REPL への SSH) というラベルが付いた SSH コマンドをコピーし、テキストエディタに貼り付けます。このフィールドは、開発エンドポイントにパブリック SSH キーが含まれている場合のみ表示されます。<private-key.pem> テキストを、開発エンドポイントの作成に使用したパブリックキーに対応するプライベートキーの .pem ファイルへのパスに置き換えます。パスには区切り記号としてバックスラッシュではなく、スラッシュを使用します。

  3. ローカルコンピュータで、SSH コマンドを実行できるターミナルウィンドウを開き、編集した SSH コマンドを貼り付けます。コマンドを実行します。

    開発エンドポイントでデフォルトの AWS Glue バージョン 1.0 (Python 3 を使用) を受け入れた場合、出力は次のようになります。

    Python 3.6.8 (default, Aug 2 2019, 17:42:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux Type "help", "copyright", "credits" or "license" for more information. SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/share/aws/glue/etl/jars/glue-assembly.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/lib/spark/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 2019-09-23 22:12:23,071 WARN [Thread-5] yarn.Client (Logging.scala:logWarning(66)) - Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME. 2019-09-23 22:12:26,562 WARN [Thread-5] yarn.Client (Logging.scala:logWarning(66)) - Same name resource file:/usr/lib/spark/python/lib/pyspark.zip added multiple times to distributed cache 2019-09-23 22:12:26,580 WARN [Thread-5] yarn.Client (Logging.scala:logWarning(66)) - Same path resource file:///usr/share/aws/glue/etl/python/PyGlue.zip added multiple times to distributed cache. 2019-09-23 22:12:26,581 WARN [Thread-5] yarn.Client (Logging.scala:logWarning(66)) - Same path resource file:///usr/lib/spark/python/lib/py4j-src.zip added multiple times to distributed cache. 2019-09-23 22:12:26,581 WARN [Thread-5] yarn.Client (Logging.scala:logWarning(66)) - Same path resource file:///usr/share/aws/glue/libs/pyspark.zip added multiple times to distributed cache. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /__ / .__/\_,_/_/ /_/\_\ version 2.4.3 /_/ Using Python version 3.6.8 (default, Aug 2 2019 17:42:44) SparkSession available as 'spark'. >>>
  4. ステートメント print(spark.version) を入力して REPL シェルが正常に動作しているかテストします。Spark のバージョンが表示されれば、REPL を使用する準備ができたことになります。

  5. シェルで次のシンプルなスクリプトを行単位で実行することができます。

    import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.transforms import * glueContext = GlueContext(SparkContext.getOrCreate()) persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") print ("Count: ", persons_DyF.count()) persons_DyF.printSchema()