DataType для вектора в Spark Java - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь протестировать udf (Java-функцию Spark), которая отлично работает с набором данных в коде, но не в тесте Junit, нет, похоже, ошибка разбора с векторной структурой, ошибка указывает:

Caused by: java.lang.ClassCastException: org.apache.spark.mllib.linalg.DenseVector cannot be cast to org.apache.spark.ml.linalg.Vector

Какой класс Vector следует включить вместо VectorUDT()?Я не могу их найти.

udf header:

public class CalculateM implements UDF2<Vector,Vector, Double> {

Тест:

@Test
public void udfCalculateMTest() {
    List<Row> data = Arrays.asList(
            RowFactory.create(
                    Vectors.dense(new double[]{4.0, 5.0}),
                    Vectors.dense(new double[]{4.0, 7.0})
            )
    );
    StructType schema = new StructType(new StructField[]{
            new StructField("v1", new VectorUDT(), false, Metadata.empty()),
            new StructField("v2", new VectorUDT(), false, Metadata.empty())
    });
    spark.createDataFrame(data, schema).createOrReplaceTempView("df");

    spark.sqlContext().udf().registerJava("corr", CalculateM.class.getName(), DataTypes.DoubleType);
   Row result = spark.sql("SELECT corr(v1,v2) from df").head();
   Assert.assertEquals(2, result.getDouble(0), 1.0e-6);
}
...