在spark / pyspark中缓存ML的预处理数据

时间:2018-04-21 08:55:49

标签: apache-spark pyspark apache-spark-mllib

我想要像这样的ML管道:

  1. raw_data = spark.read....()
  2. data = time_consuming_data_transformation(raw_data, preprocessing_params)
  3. model = fit_model(data)
  4. evaluate(model, data)
  5. 我可以在第2步之后以某种方式缓存/保留数据,所以当我再次运行我的spark应用程序时,数据不会再被转换吗?理想情况下,当原始数据或转换代码(计算图形,preprocessing_params)发生变化时,我希望缓存自动失效。

1 个答案:

答案 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会为你解决的事情。您可能需要一些事件驱动或反应组件。