AWS Glue中使用Spark SQL

AWS Glue 是一项完全托管的提取、转换和加载 (ETL) 服务,让客户能够轻松准备和加载数据进行分析。您只需在 AWS 管理控制台中单击几次,即可创建并运行 ETL 作业。您只需将 AWS Glue 指向存储在 AWS 上的数据,AWS Glue 便会发现您的数据,并将关联的元数据(例如表定义和架构)存储到 AWS Glue 数据目录中。存入目录后,您的数据可立即供 ETL 搜索、查询和使用。

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的数据,已经有了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。