Databricks读取snappy.parquet文件返回空DataFrame问题求助
问题分析与解决方案
核心问题
你用Amazon DMS迁移生成的是普通snappy.parquet文件,并非Delta Lake格式。Delta Lake依赖_delta_log目录下的元数据文件管理数据,而DMS不会自动生成这些元数据,所以用format('delta')加载自然返回空结果。
直接解决方案:读取Parquet文件
把读取格式改成parquet,同时去掉多余的header=true参数(Parquet是列存储格式,自带Schema,不需要指定header):
df = spark.read.option("recursiveFileLookup","true").parquet('/mnt/delta/postgres_table') display(df)
转换为Delta Lake格式(可选)
如果需要使用Delta Lake的ACID、版本控制等特性,可将读取后的Parquet数据写入Delta格式:
# 读取Parquet数据 df = spark.read.option("recursiveFileLookup","true").parquet('/mnt/delta/postgres_table') # 写入Delta Lake目录(建议用新目录避免覆盖原文件) df.write.format('delta').mode('overwrite').save('/mnt/delta/postgres_table_delta') # 之后即可用Delta格式读取 delta_df = spark.read.format('delta').load('/mnt/delta/postgres_table_delta') display(delta_df)
额外排查点
- 验证挂载路径:执行
dbutils.fs.ls('/mnt/delta/postgres_table')确认Parquet文件存在且路径正确 - 检查Schema:读取Parquet后执行
df.printSchema(),确认字段与原PostgreSQL表一致 - 权限验证:确保Databricks集群拥有该S3路径的读权限(即使能看到文件,也可能存在细粒度权限问题)
内容的提问来源于stack exchange,提问作者Edward Plata
相关产品推荐
相关产品推荐

