考虑以下aws胶水作业代码:
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 awsglue.dynamicframe import DynamicFrame
from pyspark.sql import SparkSession
from pyspark.sql.functions import udf
from pyspark.sql.types import StringType
## @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)
medicare_dynamicframe = glueContext.create_dynamic_frame.from_catalog(
database = "my_database",
table_name = "my_table")
medicare_dynamicframe.printSchema()
job.commit()
打印出类似的内容(请注意price_key
不在第二个位置):
root
|-- day_key: string
...
|-- price_key: string
虽然数据池中的my_table
定义为day_key
为int
(第一列),price_key
为decimal(25,0)
(第二列)。
可能是我错了,但我从源码中发现aws glue使用表和数据库来获取数据的s3路径但完全忽略任何类型定义。可能适用于某些数据格式,例如parquet
这是正常的,但不适用于csv
。
如何使用csv配置aws glue从datalake表定义为动态帧设置模式?