教程:将 REPL Shell 与开发终端节点结合使用 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

教程:将 REPL Shell 与开发终端节点结合使用

在 AWS Glue 中,您可以创建一个开发终端节点,然后调用 REPL(读取 – 评估 – 打印循环)shell,以增量方式运行 PySpark 代码,从而在部署 ETL 脚本前交互式地调试它们。

本教程假定您已执行中概述的步骤进行操作 教程的先决条件

  1. 在 AWS Glue 控制台中,选择 Dev endpoints (开发终端节点) 以导航到开发终端节点列表。选择一个开发终端节点的名称,打开其详细信息页面。

  2. 复制标记为 SSH to Python REPL 的 SSH 命令并将其粘贴到文本编辑器中。仅当开发终端节点包含公有 SSH 密钥时,才会显示此字段。将 <private-key.pem> 文本替换为与用于创建开发终端节点的公有密钥对应的私有密钥 .pem 文件的路径。使用正斜杠而不是反斜杠作为路径中的分隔符。

  3. 在您的本地计算机上,打开一个可以运行 SSH 命令的终端窗口,粘贴编辑的 SSH 命令。运行该命令。

    假设您已接受使用 Python 3 的默认 AWS Glue 版本 1.0 作为开发终端节点,则输出将如下所示:

    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 shell 是否正常工作。只要显示 Spark 版本,就表明您的 REPL 现在可供使用。

  5. 现在,您可以尝试在 shell 中逐行执行以下简单的脚本:

    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()