2 数据处理
2.1 架构
2.2 AWS Glue连接和创建
下文中提供了AWS RedShift和PG数据库的连接创建过程,在实际使用中我们可以二选一。
2.2.1 创建AWS RedShift连接
前置条件:需要有一个AWS RedShift。
AWS RedShift具体的创建过程本文不表。需要注意的是:RedShift需要创建一个终端节点,具体的方法请看《Glue连接RedShift的前置条件:创建终端节点》
由于Glue Job 在运行的时候,是在独立的服务器上,因此不能直接访问到私有子网中的服务。于是借助Glue连接,可以使得Job在运行时连接AWS服务。
步骤 |
图例 |
1、创建连接 |
|
2、输入连接名称,连接类型选择“Amazon Redshift” |
|
3、选择RedShift集群,输入配置的用户名密码 |
|
4、审核 |
|
5、测试连接 |
|
2.2.2 创建AWS RDS连接(以PG为例)
步骤 |
图例 |
1、入口 |
|
2 、输入连接名称,连接类型选择“JDBC” |
|
3、输入连接PG的JDBC,语法请看使用连接,输入用户名密码,VPC和子网需要选择PG的VPC和子网。并且至少一个选定的安全组必须为所有 TCP 端口指定自引用入站规则 |
|
4、检查无误后完成 |
|
2.3 创建AWS Glue Job
步骤 |
图例 |
1、入口 |
|
2、若要在Job中引入其他python包,请在安全配置里面添加作业参数:–additional-python-modules:SQLAlchemy== 1.3.16,psycopg2-binary==2.8.5(值请自定义) |
|
3 |
|
2.4 编写脚本
2.4.1 以AWS RedShift为例
import sys
import datetime
import boto3
import base64
from pyspark.sql import DataFrame, Row
from pyspark.context import SparkContext
from pyspark.sql.types import *
from pyspark.sql.functions import *
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue import *
import json
import datetime
import time
args = getResolvedOptions(sys.argv, ['TempDir','JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
sourceData = glueContext.create_data_frame.from_catalog( \
database = "【你的数据库名称】", \
table_name = "【表的名称】", \
transformation_ctx = "datasource0", \
additional_options = {
"startingPosition": "TRIM_HORIZON", "inferSchema": "true"})
LINCAN_SHARE_PAGE = "lincan_share_page"
share_page_dot = [
("url","string","url","string"),
("ip","string","ip","string"),
("country","string","country","string"),
("city","string","city","string"),
("user_id","string","user_id","string"),
("dot_type","string","dot_type","string"),
("header","string","header","string"),
("header_appname","string","header_appname","string"),
("header_ismobile","string","header_ismobile","string"),
("header_appversion","string"