如何为 AWS Glue 生产 Python 脚本?

Posted

技术标签:

【中文标题】如何为 AWS Glue 生产 Python 脚本?【英文标题】:How to productionise Python script for AWS Glue? 【发布时间】:2021-02-17 14:18:41 【问题描述】:

我正在关注这个教程视频: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 函数编写单元测试?

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

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

【问题讨论】:

【参考方案1】:

就目前而言,在本地测试 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 ...

【讨论】:

以上是关于如何为 AWS Glue 生产 Python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以用 Java 为 AWS Glue 编写脚本吗

将 FASTQ 文件读入 AWS Glue 作业脚本

将 AWS Glue Python 与 NumPy 和 Pandas Python 包一起使用

AWS Glue Python-Shell:如何提供自己的库?

每次我从 Python 库路径调用 .egg 时,AWS Glue 作业都会崩溃

Python 函数在 AWS Glue 中返回非类型,即使是在本地机器上工作的相同函数