如何为 AWS Glue 生产 Python 脚本?

How to productionise Python script for AWS Glue?

我正在观看此教程视频:https://www.youtube.com/watch?v=EzQArFt_On4

本视频中提供的示例代码:

from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.context import SparkContext

glueContext = GlueContext(SparkContext.getOrCreate())
glueJob = Job(glueContext)
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

glueJob.init(args['JOB_NAME'], args)

sparkSession = glueContext.spark_session

#ETL process code
def etl_process():
  ...
  return xxx

glueJob.commit()

请问函数etl_process之前的部分是否可以直接用于生产?或者我是否需要将该部分包装到一个单独的函数中,以便我可以为其添加单元测试? 像这样:

def define_spark_session():
    sc = SparkContext.getOrCreate()
    glue_context = GlueContext(sc)
    glue_job = Job(glue_context)

    args = getResolvedOptions(sys.argv, ['JOB_NAME'])

    glue_job.init(args['JOB_NAME'], args)

    spark_session = glue_context.spark_session
    return spark_session

不过好像不需要参数...

或者我应该只为 etl_process 函数编写单元测试吗?

或者我可以创建一个单独的 python 文件,其中包含 etl_process 函数并将其导入此脚本?

我是新手,有点困惑,请问有人能帮忙吗?谢谢。

目前很难在本地测试 AWS Glue 本身,尽管有一些解决方案,例如下载 AWS 为您提供的 docker 图像并从那里 运行 它(您可能需要一些调整,但应该没问题。

我想最简单的方法是将您从 gluelibs 获得的 DynamicFrame 转换为 Spark DataFrame (.toDf()) 然后在纯 Spark 中思考 ( PySpark),这样您就可以测试结果了。

dataFrame = dynamic_frame.toDf()

def transormation(dataframe):
   return dataframe.withColumn(...)

def test_transformation()
   result = transformation(input_test_dataframe)
   assert ...