我已经为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)
哪个丑陋,冗长且令人困惑。我正在寻找一种更好更清洁的方式来做到这一点。目前,我正在考虑两个选项,但我正在寻找是否有更好的可用选项: