如何为 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 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
将 AWS Glue Python 与 NumPy 和 Pandas Python 包一起使用
AWS Glue Python-Shell:如何提供自己的库?