我想要像这样的ML管道:
raw_data = spark.read....()
data = time_consuming_data_transformation(raw_data, preprocessing_params)
model = fit_model(data)
evaluate(model, data)
我可以在第2步之后以某种方式缓存/保留数据,所以当我再次运行我的spark应用程序时,数据不会再被转换吗?理想情况下,当原始数据或转换代码(计算图形,preprocessing_params)发生变化时,我希望缓存自动失效。
答案 0 :(得分:1)
我可以在第2步之后以某种方式缓存/保留数据,所以当我再次运行我的spark应用程序时,数据不会再被转换了吗?
你当然可以:
data = time_consuming_data_transformation(raw_data, preprocessing_params).cache()
但如果您的数据是非静态的,那么将数据写入持久存储总是更好:
time_consuming_data_transformation(raw_data, preprocessing_params).write.save(...)
data = spark.read.load(...)
它比缓存更昂贵,但可防止在数据更改时难以检测到不一致。
理想情况下,我希望缓存在原始数据
时自动失效
没有。除非它是一个流媒体程序(并且在流上学习并不是那么简单),Spark不会监视源代码的变化。
或转换代码(计算图形,preprocessing_params)发生变化。
我不清楚事情是如何变化的,但可能不是Spark会为你解决的事情。您可能需要一些事件驱动或反应组件。