考虑以下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 在第二个位置是 not ):

root
|-- day_key: string
...
|-- price_key: string

而datalake中的 my_table 定义为 day_keyint (第一列), price_keydecimal(25,0) (第二列) .

可能是我错了,但我从源码中发现aws glue使用表和数据库来获取数据的s3路径,但完全忽略任何类型定义 . 可能是某些数据格式,如 parquet 这是正常的,但不适用于 csv .

如何使用csv配置aws glue来设置来自datalake table defintion的动态帧架构?