带内部换行的CSV转Parquet后,AWS Crawler导入Athena异常求助
解决AWS Glue转Parquet后Crawler导入异常问题
核心问题根源
你的CSV包含内部换行,但Glue Job的CSV解析配置未处理这种场景,导致转Parquet时数据结构错乱,进而引发Crawler爬取异常。默认的CSV解析会把字段内的换行识别为新行,造成字段错位、数据格式混乱。
解决方案步骤
1. 修改Glue Job的CSV解析配置
更新format_options,添加多行解析和引号处理参数,确保Spark正确识别带内部换行的字段:
inputDyf = glueContext.create_dynamic_frame_from_options( connection_type = "s3", connection_options = {"paths": [input_loc]}, format = "csv", format_options={ "withHeader": True, "separator": ",", "multiline": True, # 开启多行解析,处理字段内换行 "quoteChar": "\"", # 指定字段包裹的引号(通常是双引号) "escapeChar": "\"" # 指定转义字符(如果字段内的引号用双引号转义) })
注:如果你的CSV用单引号包裹字段,把
quoteChar和escapeChar改成"'即可。
2. 验证Parquet数据正确性
重新运行Glue Job后,直接用Athena查询Parquet路径验证数据:
SELECT * FROM "s3://your-parquet-output-location/" LIMIT 10;
确认字段值完整、行数匹配、没有错位情况,排除Parquet文件本身的问题。
3. 调整Crawler配置并重新爬取
- 删除之前Crawler生成的错误表(避免元数据冲突)
- 确保Crawler的分类器列表中,Parquet分类器优先级最高(防止误识别格式)
- 重新启动Crawler,指定正确的数据库和表前缀
4. 可选:改用Spark原生API处理(如果DynamicFrame仍有问题)
如果Glue DynamicFrame的解析效果不佳,直接用Spark原生CSV读取API:
# 替换原有的inputDyf创建逻辑 df = spark.read.csv( input_loc, header=True, sep=",", quote='"', escape='"', multiLine=True, inferSchema=True # 可选:自动推断字段类型,或手动指定schema ) # 写入Parquet df.write.mode("overwrite").parquet(output_loc)
内容的提问来源于stack exchange,提问作者Jhoanna Nikolas
相关产品推荐
相关产品推荐

