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

如何仅使用Spark SQL读取DBFS/ADLS中带指定分隔符的CSV文件

在Databricks用Spark SQL直接查询带特定分隔符的CSV文件

你可以通过以下两种方式直接用Spark SQL(包括魔法命令%sql)查询ADLS或DBFS上的CSV文件,无需创建永久中间表:

方法1:直接在SELECT语句中指定CSV选项

直接使用csv.路径``的格式引用文件,并通过OPTIONS子句指定表头、分隔符等参数,示例如下:

%sql
SELECT * FROM csv.`dbfs:/mnt/adls/path/to/your/data.csv`
OPTIONS (
  header = 'true',
  sep = '|', -- 替换为你的特定分隔符,比如\t、;等
  inferSchema = 'true' -- 自动推断列类型,不需要的话设为'false'
)

如果需要手动指定列类型(比自动推断更精准),可以用schema参数替代inferSchema:

%sql
SELECT * FROM csv.`dbfs:/mnt/adls/path/to/your/data.csv`
OPTIONS (
  header = 'true',
  sep = ';',
  schema = 'user_id INT, user_name STRING, register_date DATE'
)

方法2:创建临时视图查询

临时视图仅在当前会话有效,不会在元数据中留下永久表,适合临时查询场景:

%sql
CREATE OR REPLACE TEMP VIEW temp_csv_data
USING csv
OPTIONS (
  path = 'dbfs:/mnt/adls/path/to/your/data.csv',
  header = 'true',
  sep = '\t', -- 示例为制表符分隔
  inferSchema = 'true'
);

-- 之后就可以像查询普通表一样查询视图
SELECT user_name, register_date FROM temp_csv_data WHERE user_id > 100;

关键说明

  • 你之前遇到的列合并、不识别表头问题,是因为Spark SQL读取CSV时默认用逗号作为分隔符,且默认不解析表头,必须显式指定header='true'和对应sep参数才能正确解析。
  • 路径支持ADLS的挂载路径(比如dbfs:/mnt/adls/...)或原生ADLS路径(比如abfss://container@storageaccount.dfs.core.windows.net/path/...)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:37:14