Glue3.0导入awsglueml下FillMissingValues报ImportError如何解决
问题根因
核心原因是Glue 3.0内置的awsglueml包版本和公开最新官方文档不匹配:FillMissingValues这个转换类从未在Glue 3.0预装的awsglueml版本中发布。
从报错路径里的Python 3.6站点包路径就能佐证:Glue 3.0基于Spark 3.1、Python 3.6构建,预装的awsglueml是2021年的初始版本,仅包含实体匹配、FindMatches这类早期ML转换能力,缺失值填充、异常值处理这类transform都是后续Glue版本迭代才新增的,你按照最新文档写的导入逻辑本身没有错,问题出在文档没有标注功能对应的最低Glue版本。
排查与解决步骤
- 第一步先做环境校验,排除导入写法问题
在Glue脚本开头加如下代码,打印当前环境awsglueml.transforms模块的所有导出成员:
运行后输出的列表里不会出现FillMissingValues,就能确认是环境版本缺失导致的报错,和你的代码写法无关。import awsglueml.transforms as ml_transforms print(ml_transforms.__all__ if hasattr(ml_transforms, "__all__") else dir(ml_transforms)) - 最稳妥的解决方式:升级Glue版本
直接把Glue作业/开发端点的运行版本升级到Glue 4.0及以上,这些版本预装的awsglueml已经同步了包含FillMissingValues在内的所有新转换类,升级后原有导入、调用代码不需要任何修改就能正常运行。注意:如果作业依赖Glue 3.0专属的第三方自定义包,升级前先做Spark 3.3+(Glue4.0对应Spark版本)的兼容性验证,避免版本差异触发其他运行错误。
- 无法升级版本的兼容方案
如果受业务限制必须留在Glue 3.0,不要尝试手动pip升级awsglueml包——Python3.6环境和新版awsglueml的依赖完全不兼容,会触发更多连锁报错。直接用Spark原生API实现同等缺失值填充逻辑即可,示例:from awsglue import DynamicFrame from pyspark.sql.functions import coalesce, col, lit # 如需实现和FillMissingValues默认一致的众数填充,先统计对应字段的高频值 mode_val = dyf.toDF().groupBy("demographic").count().orderBy("count", ascending=False).first()[0] # 转DataFrame执行填充,再转回DynamicFrame filled_df = dyf.toDF().withColumn("demographic", coalesce(col("demographic"), lit(mode_val))) dyf = DynamicFrame.fromDF(filled_df, glueContext, "filled_dyf")
内容的提问来源于stack exchange,提问作者Jérémy
相关产品推荐
相关产品推荐

