org.apache.spark.ml.linalg.DenseVector не является допустимым внешним типом для схемы вектора - PullRequest
1 голос
/ 02 июля 2019

Я много работал с Big Data в Spark, и у меня сейчас есть небольшой блокировщик, надеюсь, вы поможете мне с этой маленькой проблемой.

Я преобразую Dataset<Row> объект в JavaRDD<Row>, поэтому таким образом я обрабатываю преобразование как:

//Dataset to RDDs
    JavaRDD<Row> trainingData = featureSelection.javaRDD().map(f -> {
        return RowFactory.create(Double.parseDouble(f.getString(4).trim()),
            Vectors.dense(Double.parseDouble(f.getString(0).trim()), Double.parseDouble(f.getString(1).trim()),
                Double.parseDouble(f.getString(2).trim()), Double.parseDouble(f.getString(3).trim())));
    });

Итак, мне нужно определить schema, чтобы затем снова преобразовать мои данные в Dataset<Row> объект.

Моя проблема возникает при создании схемы:

//Defining schema
    StructType schema = new StructType(new StructField[] {
        new StructField("label", DataTypes.DoubleType, false, Metadata.empty()),
        new StructField("features", new org.apache.spark.mllib.linalg.VectorUDT(), false, Metadata.empty())
    });

Но тогда я получил это stack trace:

java.lang.RuntimeException: Error while encoding: java.lang.RuntimeException: org.apache.spark.ml.linalg.DenseVector is not a valid external type for schema of vector
validateexternaltype(getexternalrowfield(assertnotnull(input[0, org.apache.spark.sql.Row, true]), 0, label), DoubleType) AS label#111
if (assertnotnull(input[0, org.apache.spark.sql.Row, true]).isNullAt) null else newInstance(class org.apache.spark.mllib.linalg.VectorUDT).serialize AS features#112
    at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder.toRow(ExpressionEncoder.scala:290)

Похоже, я не могу использовать DenseVectors для создания схемы. Я пытаюсь найти правильный VectorStructure, чтобы решить мою проблему, но мне не везет. Я еще не пробовал с Vectors.sparse, но если кто-нибудь решил эту проблему, я очень ценю вашу помощь.

Кстати, используемая мной версия spark - 2.2.3.

Большое спасибо всем !!

...