Search code examples
javascalapysparkmleap

How to use MLeap DenseTensor in Java


I am using MLeap to run a Pyspark logistic regression model in a java program. Once I run the pipeline I am able to get a DefaultLeapFrame object with one row Stream(Row(1.3,12,3.6,DenseTensor([D@538613b3,List(2)),1.0), ?).

But I am not sure how to actually inspect the DenseTensor object. When I use getTensor(3) on this row I get an object. I am not familiar with Scala but that seems to be how this is meant to be interacted with. In Java how can I get the values within this DenseVector?

Here is roughly what I am doing. I'm guessing using Object is not right for the type. . .

DefaultLeapFrame df = leapFrameSupport.select(frame2, Arrays.asList("feat1", "feat2", "feat3", "probability", "prediction"));
Tensor<Object> tensor = df.dataset().head().getTensor(3);

Thanks


Solution

  • So the MLeap documentation for the Java DSL is not so good but I was able to look over some unit tests (link) that pointed me to the right thing to use. In case anyone else is interested, this is what I did.

    DefaultLeapFrame df = leapFrameSupport.select(frame, Arrays.asList("feat1", "feat2", "feat3", "probability", "prediction"));
    TensorSupport tensorSupport = new TensorSupport();
    List<Double> tensor_vals = tensorSupport.toArray(df.dataset().head().getTensor(3));