AWS Glue读取含双引号CSV丢失行的解决方法咨询
解决Glue Catalog读取含双引号CSV的问题
当CSV字段包含未正确转义的双引号时,Glue默认的CSV解析规则会错误地将多行合并为一行,导致实际加载的行数远少于预期。以下是几种可行的解决办法:
方法1:修改Glue Catalog表的解析参数
直接在Glue控制台或通过API调整目标表的CSV解析配置:
- 配置
quoteChar为",escapeChar根据CSV实际转义方式设置:如果双引号是用双引号转义(比如"He said ""hello"""),就把escapeChar也设为";如果是反斜杠转义,就设为\。 - 检查并移除可能冲突的解析参数,确保规则统一。
修改完成后重新运行原代码,Glue就能正确解析带双引号的字段了。
方法2:改用from_options自定义解析规则
如果不想修改Catalog表参数,可以绕过Catalog直接用from_options方法指定解析规则,示例代码:
df_src_ev = glueContext.create_dynamic_frame.from_options( connection_type="s3", connection_options={"paths": ["s3://your-bucket/csv-path/"]}, format="csv", format_options={ "quoteChar": "\"", "escapeChar": "\"", # 按实际转义方式调整,反斜杠转义就改成"\\" "withHeader": True, "separator": "," }, transformation_ctx="df_src_ev", push_down_predicate=str_predicate )
这种方式不受Catalog表参数限制,能灵活适配特殊格式的CSV。
方法3:用Spark原生API读取后转Dynamic Frame
如果前两种方法都不适用,可借助Spark的CSV解析能力先读取文件,再转为Dynamic Frame:
# Spark读取CSV并配置解析规则 spark_df = spark.read.option("quote", "\"") \ .option("escape", "\"") \ .option("header", "true") \ .csv("s3://your-bucket/csv-path/") # 转换为Glue Dynamic Frame df_src_ev = DynamicFrame.fromDF(spark_df, glueContext, "df_src_ev")
Spark的CSV解析器对特殊字符的处理更健壮,适合复杂格式的场景。
内容的提问来源于stack exchange,提问作者moslanth
相关产品推荐
相关产品推荐

