从Spark MLLib管道中提取数据帧,以防止重复计算

时间:2018-08-09 13:56:45

标签: apache-spark apache-spark-mllib

我已经为spark MLLib实现了一些自定义转换器,并且我想使用Mllib管道概念将它们串在一起。现在,我遇到了以下使用问题。

我的一个转换器实际上包括一个转换器,用于向训练数据帧添加行,以及一个估计器,该估计器根据测试数据进行训练,以向测试数据添加相似的功能。初始转换器使用数据的一些随机分割,因此我无法按原样使用管道。

正在执行以下操作

val pipeline = new Pipeline(estimator :: transformer :: Nil)
val model = pipeline.fit()
train = pipeline.transform(train)
test = pipeline.transform(test)

不起作用。

此刻我要做的是

val transform_pipeline = new Pipeline(transformer :: Nil)
val model_transform = transform_pipeline.fit(train)
train = model_transform.transform(train)
val estimate_pipeline = new Pipeline(estimator :: Nil)
val model_estimator = estimate_pipeline.fit(train)
test = model_estimator.transform(test)

哪个丑陋,冗长且令人困惑。我正在寻找一种更好更清洁的方式来做到这一点。目前,我正在考虑两个选项,但我正在寻找是否有更好的可用选项:

  1. 创建一个简单的身份估计器,您可以在管道的末尾使用它来检索转换后的数据框
  2. 编写自己的自定义数据框,同时显示模型和转换后的数据框。

0 个答案:

没有答案