MLRun 1.2.1特征集数据摄入时Pipeline调用次数翻倍问题咨询
MLRun 1.2.1特征集摄入时Pipeline调用次数翻倍问题
问题现象
使用MLRun 1.2.1版本向特征集摄入数据时,处理函数调用次数是预期的2倍:仅含2条数据的DataFrame,calc方法却被执行了4次。
复现代码
import mlrun import mlrun.feature_store as fstore # mlrun: start-code import math def calc(x): x['fn2']=math.sin(x['fn2'])*100.0 print('calc') return x # mlrun: end-code mlrun.set_env_from_file("mlrun-nonprod.env") project = mlrun.get_or_create_project(project_name, context='./', user_project=False) feature_derived = fstore.get_feature_set(f"{project_name}/{feature_derivedName}") ... # dataFrm has only two values feature_derived.graph.to(name="calc", handler='calc') fstore.ingest(feature_derived, dataFrm)
执行输出
calc calc calc calc
问题原因
MLRun 1.2.1的Feature Store在执行fstore.ingest()时,默认包含两个阶段:
- 预览校验阶段:会完整执行一遍特征处理流程,用来验证数据处理逻辑的正确性、输出格式是否匹配特征集定义,此阶段会调用
calc函数处理每条数据。 - 正式摄入阶段:完成校验后,才会真正将处理后的数据写入特征集,此阶段会再次调用
calc函数处理每条数据。
你的DataFrame有2条数据,两个阶段各触发2次函数调用,最终总共出现4次calc输出。
解决方法
如果不需要预览校验,可以在调用fstore.ingest()时添加preview=False参数,这样就只会执行一次正式摄入流程:
fstore.ingest(feature_derived, dataFrm, preview=False)
内容的提问来源于stack exchange,提问作者JIST
相关产品推荐
相关产品推荐

