Spark SQL导入CSV无结果:Databricks挂载Azure Blob存储创建表无数据
解决Databricks创建CSV表后查询无数据的问题
以下是排查和解决该问题的几个关键步骤:
验证文件路径与存在性
先确认挂载点下的文件是否存在且路径无误:%fs ls mnt/testdllg/bloby/raw/注意:Azure Blob和Databricks路径区分大小写,需确保文件名、路径拼写完全一致。如果文件不存在,先检查挂载配置或文件上传状态。
适配CSV文件的表头设置
如果你的circuits.csv第一行是字段名(表头),必须在OPTIONS中添加header "true",否则Spark会将表头当作数据行处理,而类型不匹配的行会被默认过滤:CREATE TABLE IF NOT EXISTS csv_db.circuits( circuitId INT, circuitRef STRING, name STRING, location STRING, country STRING, lat DOUBLE, lng DOUBLE, alt INT, url STRING ) USING CSV OPTIONS (path "mnt/testdllg/bloby/raw/circuits.csv", header "true")若CSV使用非逗号分隔符(如制表符),还需添加
delimiter "\t"指定分隔符。检查Schema类型兼容性
手动定义的Schema可能与实际数据类型不匹配,导致数据被过滤。可以先让Spark自动推断Schema,对比差异:CREATE TABLE IF NOT EXISTS csv_db.circuits_temp USING CSV OPTIONS (path "mnt/testdllg/bloby/raw/circuits.csv", header "true", inferSchema "true")然后查看自动生成的表结构:
DESCRIBE csv_db.circuits_temp对比你手动定义的字段类型,修正不匹配项(比如lat字段若实际是字符串类型,却定义为DOUBLE会导致数据丢弃)。
排查数据解析错误
开启调试日志查看具体错误:SET spark.sql.debug.maxToStringFields=100; SELECT * FROM csv_db.circuits LIMIT 10;若有类型转换报错,针对性调整Schema或清洗数据。
确认文件内容有效性
查看文件是否为空或内容异常:%fs head mnt/testdllg/bloby/raw/circuits.csv确保文件有有效数据行,而非仅表头或空文件。
内容的提问来源于stack exchange,提问作者Luis Gildardo Gil Gonzalez
相关产品推荐
相关产品推荐

