You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:AWS Glue读取表时丢失全空列如何解决

解决AWS Glue读取时保留全空列的问题

方法1:Spark SQL读取后转DynamicFrame(最稳妥)

Spark SQL会严格遵循Glue Data Catalog的表定义,保留所有列(包括全空列),读取后再转为Glue DynamicFrame即可:

# 用Spark SQL读取目标表
spark_df = spark.sql("SELECT * FROM database.table")

# 转换为Glue DynamicFrame
dF = DynamicFrame.fromDF(spark_df, glueContext, "dynamic_frame_with_all_cols")

# 验证schema,确认全空列已保留
dF.printSchema()

方法2:基于Catalog schema手动映射列

如果必须使用from_catalog读取,可以先拉取表的元数据schema,生成映射规则强制保留所有列:

import boto3

# 初始化Glue客户端
glue_client = boto3.client('glue')

# 获取目标表的元数据信息
table_meta = glue_client.get_table(
    DatabaseName="database",
    Name="table"
)

# 生成applyMapping需要的映射规则(原列名-原类型->目标列名-目标类型)
mapping_rules = []
for col in table_meta['Table']['StorageDescriptor']['Columns']:
    mapping_rules.append(
        (col['Name'], col['Type'], col['Name'], col['Type'])
    )

# 读取DynamicFrame
raw_dF = glueContext.create_dynamic_frame.from_catalog(
    database="database",
    table_name="table"
)

# 应用映射规则,强制保留所有列
dF_with_all_cols = raw_dF.applyMapping(mapping=mapping_rules)

# 验证schema
dF_with_all_cols.printSchema()

方法3:修改读取配置参数(视版本/数据格式生效)

部分Glue版本中,可通过additional_options禁用空列自动删除:

dF = glueContext.create_dynamic_frame.from_catalog(
    database="database",
    table_name="table",
    additional_options={
        "dropNullFields": "false"
    }
)

# 验证schema
dF.printSchema()

注意:如果数据格式是CSV这类无自描述schema的格式,需确保Glue Data Catalog中的列定义完全准确,否则上述方法可能无法生效。

内容的提问来源于stack exchange,提问作者RAHUL DHANOLA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 04:55:16