使用AWS Glue Catalog通过AWS Glue Job读取含逗号的S3 CSV文件时解析异常问题
解决AWS Glue Job读取含引号包裹逗号的CSV文件问题
这个问题我之前帮很多人处理过——CSV里字段用引号包裹但包含分隔符的情况,确实会让默认的解析逻辑出错。别担心,AWS Glue完全支持处理这种场景,我分两种常用的实现方式给你讲清楚:
一、用Glue Studio可视化配置Job
如果习惯用可视化界面创建Job,直接在数据源配置里指定引号参数即可:
- 打开AWS Glue Studio,新建一个Job,选择你的S3 CSV文件作为数据源
- 在数据源的配置面板中,找到CSV options区域:
- 确认
Delimiter设置为逗号(,) - 设置
Quote character为双引号(")——这是关键!它会告诉Glue解析器:双引号包裹的内容属于同一个字段,里面的逗号不算分隔符 - 开启
Has header选项,确保表头被正确识别为列名
- 确认
完成配置后,运行Job就能正确解析第三列的内容了。
二、用PySpark代码编写Glue Job
如果是用代码开发Job,在创建DynamicFrame时指定format options即可:
from awsglue.context import GlueContext from pyspark.context import SparkContext from awsglue.utils import getResolvedOptions import sys # 初始化上下文 args = getResolvedOptions(sys.argv, ['JOB_NAME']) sc = SparkContext() glueContext = GlueContext(sc) spark = glueContext.spark_session # 读取S3上的CSV文件,指定解析参数 dynamic_frame = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://your-bucket-name/path/to/your/file.csv"]}, format="csv", format_options={ "withHeader": True, "delimiter": ",", "quoteChar": "\"", # 如果你的字段内部存在转义的双引号(比如"COMMENT1""COMMENT2"),可以添加下面这行 # "escapeChar": "\"" } ) # 转换为Spark DataFrame查看解析结果 df = dynamic_frame.toDF() df.show(truncate=False)
参数说明:
quoteChar: 指定双引号作为字段的包裹符号,解析时会忽略引号内部的分隔符withHeader: 读取文件第一行作为列名escapeChar: 可选参数,用于处理字段内部包含双引号的场景(例如用两个双引号表示一个普通双引号)
三、同步配置Glue Catalog表(可选)
如果你需要把解析后的元数据存入Glue Catalog,或者后续直接从Catalog读取该表,记得在创建Catalog表时配置对应的参数:
- 在Glue控制台创建表时,选择CSV格式
- 进入表的Properties页面,添加以下键值对:
skip.header.line.count=1delimiter=,quoteChar="
这样后续从Catalog读取该表时,Glue会自动应用这些解析规则,无需重复配置。
测试一下你提供的样本数据,解析后第三列的内容会完整保留为COMMENT1,COMMENT2,不会被拆分成多列。
内容的提问来源于stack exchange,提问作者Data girl
相关产品推荐
相关产品推荐

