tfdv.infer_schema()传入StatsOptions报TypeError问题求助
问题原因
报错的核心是接口入参类型不匹配:
tfdv.infer_schema()的第一个位置参数要求传入DatasetFeatureStatisticsList类型的数据集统计结果proto对象- 代码中直接将
StatsOptions类型的统计配置对象作为入参传给了该接口,不符合参数类型要求。
本质是对TFDV的接口逻辑理解有误:StatsOptions是统计计算阶段的配置项,用来指定特征白名单、统计计算规则等,本身不是统计结果,不能直接传给schema生成接口。
解决方法
按照TFDV的标准流程调整代码顺序,先基于配置生成统计结果,再用统计结果推导schema:
- 保留原有
StatsOptions配置逻辑,指定需要保留的特征列表 - 调用对应数据源的统计生成接口(pandas DataFrame对应
tfdv.generate_statistics_from_dataframe,CSV对应tfdv.generate_statistics_from_csv等),将StatsOptions实例传入接口的stats_options参数,拿到合法的统计结果对象 - 将统计结果对象传入
tfdv.infer_schema()生成schema
修正后的可运行代码如下:
features_remove= {"region","fiscal_week"} columns= [col for col in df.columns if col not in features_remove] stat_options= tfdv.StatsOptions(feature_allowlist=columns) # 传入配置和原始数据,生成符合要求的统计结果 statistics = tfdv.generate_statistics_from_dataframe( dataframe=df, stats_options=stat_options ) # 传入统计结果而非配置对象,生成schema schema= tfdv.infer_schema(statistics)
注意:如果使用其他数据源,替换对应的统计生成接口即可,
StatsOptions始终作为统计生成接口的配置参数传入,不要直接传给infer_schema。
内容的提问来源于stack exchange,提问作者Mansi Mehta
相关产品推荐
相关产品推荐

