Glue提供了DynamicFrame来操作数据,但如果用户习惯用Spark SQL来做ETL,那是否可行呢? 本文就做了一个尝试:
首先我们创建一个基本的Glue Job,选择Spark,这里要注意在Job parameters里面加上
--enable-glue-datacatalog = true
这是为了在Spark SQL中使用Glue的元数据。
之后其他步骤都随意选择,进入脚本编辑环境,将脚本替换成如下:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from pyspark.sql import SparkSession
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
spark.sql("use sampledb")
spark.sql("""
insert overwrite table table_6 select col1,col2,col3 from testdata1
""")
job.commit()
这里做了一个简单的insert overwrite操作,从表testdata1中选择数据到表table_6。
尝试运行Job,等待7-8分钟后就可以看到任务完成了。此时去检查table_6的数据,已经有了。