PySpark基于ADLS中CSV创建外部表仅显示一列,Parquet正常
问题原因与解决办法
核心问题:OPTIONS参数的引号写法错误
你的代码里OPTIONS块里的参数用了单引号包裹键和值,这会导致Spark无法正确识别CSV的分隔符配置,最终把整行内容当成单一列col读取。
修正后的代码
把OPTIONS里的单引号去掉(键不需要引号),值改用单引号或双引号都可以,规范写法如下:
CREATE EXTERNAL TABLE IF NOT EXISTS <table_name> ( column_1 string, column_2 int, column_3 string ) USING CSV OPTIONS ( delimiter ',', header 'true', inferSchema 'false' ) LOCATION '<abfss_location>'
也可以用键值对的标准写法(更清晰):
CREATE EXTERNAL TABLE IF NOT EXISTS <table_name> ( column_1 string, column_2 int, column_3 string ) USING CSV OPTIONS ( "delimiter" = ",", "header" = "true", "inferSchema" = "false" ) LOCATION "<abfss_location>"
为什么Parquet文件不受影响?
Parquet是列式存储格式,本身自带完整的元数据(包括列名、数据类型等),Spark读取Parquet时会直接解析内置的元数据,不需要依赖OPTIONS里的分隔符这类配置,所以即使引号写法有误,也能正确识别列结构。而CSV是纯文本格式,完全依赖OPTIONS中的配置来拆分列,一旦配置无法被正确识别,就会默认把整行内容作为单列col读取。
额外验证建议
- 执行
DESCRIBE <table_name>查看表的元数据,确认列定义是否正确加载 - 用
spark.read.csv("<abfss_location>", header=True, inferSchema=False).show()直接读取CSV文件,验证是否能正确解析列,排除ADLS路径或文件本身的问题
内容的提问来源于stack exchange,提问作者dan ward
相关产品推荐
相关产品推荐

