不使用Crawler能否在AWS Glue中直接读取固定长度文件
结论
AWS Glue 目前没有原生的固定宽度文件解析支持,无法直接通过 DynamicFrameReader.from_options 方法直接读取固定长度文件,需要结合 Spark 底层解析能力实现,无需调用 Crawler。
具体实现步骤
- 第一步:通过
from_options把目标固定宽度文件读取为纯文本格式的 DynamicFrame
from awsglue.context import GlueContext from pyspark.context import SparkContext sc = SparkContext() glueContext = GlueContext(sc) # 读取S3上的固定宽度文件为纯文本 raw_dyf = glueContext.create_dynamic_frame.from_options( connection_type = "s3", connection_options = { "paths": ["s3://<你的存储桶路径>/<固定宽度文件所在目录>/"] }, format = "text", transformation_ctx = "raw_fixed_width_file" )
- 第二步:将 DynamicFrame 转为 Spark DataFrame,按字段宽度规则截取对应字段
示例假设你的文件包含3个字段,宽度分别为10、20、15:
from pyspark.sql.functions import substring raw_text_df = raw_dyf.toDF() parsed_df = raw_text_df.select( substring(raw_text_df.value, 1, 10).alias("字段1"), substring(raw_text_df.value, 11, 20).alias("字段2"), substring(raw_text_df.value, 31, 15).alias("字段3") )
如果字段数量较多,可以预先定义字段名和宽度的映射列表,批量生成截取逻辑,无需手动逐行编写字段规则。
- 第三步(可选):如果后续需要使用 Glue DynamicFrame 的相关能力处理数据,可将解析完成的 Spark DataFrame 转回 DynamicFrame:
parsed_dyf = glueContext.create_dynamic_frame_from_rdd(parsed_df.rdd, "parsed_fixed_width_data")
内容的提问来源于stack exchange,提问作者Aji C S
相关产品推荐
相关产品推荐

