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

Glue Notebook中SparkDataFrames无法读取Glue Catalog的Iceberg表

Glue Notebook读取Iceberg表报错InputFormat为null的解决办法

问题根源

你的Iceberg表在Glue Catalog里的元数据缺了Spark/Iceberg需要的InputFormat和OutputFormat配置项。Athena能正常查询是因为它直接用Iceberg的元数据解析逻辑,但Glue Notebook的Spark环境依赖Hive兼容的元数据格式,缺这俩配置就会触发报错。

具体解决步骤

1. 补全Glue表的元数据配置

先通过Glue控制台或AWS CLI查看目标表的元数据,确认StorageDescriptor下的InputFormat和OutputFormat是否为空。如果为空,手动添加Iceberg对应的配置:

  • InputFormat:org.apache.iceberg.hadoop.hive.HiveIcebergInputFormat
  • OutputFormat:org.apache.iceberg.hadoop.hive.HiveIcebergOutputFormat
  • 同时把SerdeInfo下的SerializationLibrary设为org.apache.iceberg.hadoop.hive.HiveIcebergSerDe

用AWS CLI修改的命令示例:

aws glue update-table --database-name mydatabase --table-input '{
  "Name": "my_table",
  "StorageDescriptor": {
    "InputFormat": "org.apache.iceberg.hadoop.hive.HiveIcebergInputFormat",
    "OutputFormat": "org.apache.iceberg.hadoop.hive.HiveIcebergOutputFormat",
    "SerdeInfo": {
      "SerializationLibrary": "org.apache.iceberg.hadoop.hive.HiveIcebergSerDe"
    }
  }
}'

2. 修正Glue Notebook的Spark会话配置

确保Spark初始化时正确配置Iceberg的Glue Catalog,把以下配置加到初始化脚本中:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .config("spark.sql.catalog.glue_catalog", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.glue_catalog.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
    .config("spark.sql.catalog.glue_catalog.warehouse", "s3://你的Iceberg仓库路径/") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.hadoop.hive.metastore.client.factory.class", "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \
    .getOrCreate()

3. 验证表读取是否正常

修复元数据和配置后,重新在Notebook中尝试读取表:

# 方式1:通过Glue Catalog引用
df = spark.sql("SELECT * FROM glue_catalog.mydatabase.my_table")
df.show()

# 方式2:直接读取S3路径(备用方案)
df = spark.read.format("iceberg").load("s3://你的表存储路径/")
df.show()

4. 排查表创建环节的问题

如果是通过魔法命令创建表后出现的问题,要确保建表时指定了正确的Catalog和存储格式。比如用%sql魔法命令时,需明确使用Iceberg Catalog:

CREATE TABLE glue_catalog.mydatabase.my_table (
  id INT,
  name STRING
) USING iceberg
LOCATION 's3://你的Iceberg仓库路径/mydatabase/my_table'

关键注意事项

  • 优先使用AWS Glue 3.0+版本,内置Iceberg支持,兼容性更强
  • 确认Glue执行角色拥有对应S3路径的读写权限,避免权限问题干扰
  • 会话配置中不要同时混用Hive Catalog和Iceberg Catalog的设置,保持配置统一

内容的提问来源于stack exchange,提问作者Aleksei Díaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 06:40:25