在这种情况下,您可以:
1)使用h2o.predict(H2OFrame)
方法生成预测,但您需要转换RDD
为H2OFrame
. 这不是完美的解决方案……但是,在某些情况下,它可以提供合理的解决方案。
2) 切换到 JVM 并通过 Spark 的 Py4J 网关直接调用 JVM 这目前还不是完全可行的解决方案,因为该方法score0
需要在 H2O 端接受非原始类型并且也是可见的(现在它受到保护),但在最少的想法:
model = sc._jvm.water.DKV.getGet("deeplearning.model")
double_class = sc._jvm.double
row = sc._gateway.new_array(double_class, nfeatures)
row[0] = ...
...
row[nfeatures-1] = ...
prediction = model.score0(row)
我为这种情况创建了 JIRA 改进https://0xdata.atlassian.net/browse/PUBDEV-2726
但是,解决方法是围绕模型创建一个 Java 包装器,该包装器将公开正确的score0
函数形状:
class ModelWrapper extends Model {
public double[] score(double[] row) {
return score0(row)
}
}
另请参阅hex.ModelUtils
:https ://github.com/h2oai/sparkling-water/blob/master/core/src/main/scala/hex/ModelUtils.scala
(同样,您可以通过 Spark 公开的 Py4J 网关直接调用它们)