Я пытаюсь протестировать 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);
}