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

使用Spark SQL读取EMR上Delta Lake表报错:Table does not support reads

问题分析与解决方案

先排查表名拼写错误

你的代码中创建表的语句是:

CREATE TABLE poc.contacts USING DELTA LOCATION 's3://.../staging/contact'

但查询时使用的是poc.contact(少了末尾的s),这会导致Spark找不到正确的表。建议先修正表名拼写,执行:

select count(*) from poc.contacts

如果修正后仍报错,再排查以下问题:

1. 确认Spark配置是否正确生效

在Jupyter Notebook中,%%configure需要在SparkSession初始化之前执行才会生效。如果你的Notebook中先执行了import pyspark.sql或者隐式创建了SparkSession,后续的配置不会被应用。

解决方式:

  • 重启Notebook内核,先执行%%configure代码块,再进行后续Spark操作。
  • 或者通过SparkSession显式加载配置:
from pyspark.sql import SparkSession
from delta.tables import *

spark = SparkSession.builder \
    .appName("DeltaTest") \
    .config("spark.jars.packages", "io.delta:delta-core_2.12:0.8.0") \
    .config("spark.sql.extensions", "io.delta.sql.DeltaSparkSessionExtension") \
    .config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog") \
    .getOrCreate()

2. 检查Delta版本与EMR Spark版本兼容性

Delta Lake版本需要和EMR上的Spark版本匹配,否则会出现兼容性问题:

  • EMR 5.x(Spark 2.x)对应Delta Lake 0.4.x-0.7.x
  • EMR 6.x(Spark 3.x)对应Delta Lake 1.x及以上

你当前使用的delta-core_2.12:0.8.0适用于Spark 3.0,但如果你的EMR集群是5.x版本(Spark 2.x),就会出现不兼容。请根据EMR版本调整Delta包版本,比如EMR 6.2.0(Spark 3.1.2)可使用io.delta:delta-core_2.12:1.0.0。

3. 使用Delta Lake原生方式注册表

尝试用DeltaTable API创建或注册表,确保元数据正确同步:

# 注册已存在的Delta表到Catalog
deltaTable = DeltaTable.forPath(spark, "s3://.../staging/contact")
deltaTable.createOrReplaceTempView("contacts")

# 或者直接注册到poc数据库
spark.sql("CREATE OR REPLACE TABLE poc.contacts USING DELTA LOCATION 's3://.../staging/contact'")

4. 修复Delta表元数据(若S3上的表存在损坏)

如果S3上的Delta表元数据损坏,会导致无法读取,可执行修复命令:

deltaTable = DeltaTable.forPath(spark, "s3://.../staging/contact")
deltaTable.vacuum()  # 清理无效文件
deltaTable.generate("symlink_format_manifest")  # 生成manifest文件辅助Spark读取

内容的提问来源于stack exchange,提问作者rodrigo sejas Jaldin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:36:14