Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java i/p列功能必须是字符串或数字类型,但必须是org.apache.spark.ml.linalg.VectorUDT_Java_Scala_Apache Spark_Logistic Regression_Apache Spark Ml - Fatal编程技术网

Java i/p列功能必须是字符串或数字类型,但必须是org.apache.spark.ml.linalg.VectorUDT

Java i/p列功能必须是字符串或数字类型,但必须是org.apache.spark.ml.linalg.VectorUDT,java,scala,apache-spark,logistic-regression,apache-spark-ml,Java,Scala,Apache Spark,Logistic Regression,Apache Spark Ml,我对Spark机器学习非常陌生,只是一个3天大的新手,我基本上是在通过Java使用Spark中的逻辑回归算法来预测一些数据。我参考了一些网站和文档,并提出了代码,我正试图执行它,但面临一个问题。 因此,我已经对数据进行了预处理,并使用vector assembler将所有相关列合并到一个列中,我正在尝试拟合模型,并面临一个问题 public class Sparkdemo { static SparkSession session = SparkSession.builder().appNam

我对Spark机器学习非常陌生,只是一个3天大的新手,我基本上是在通过Java使用Spark中的逻辑回归算法来预测一些数据。我参考了一些网站和文档,并提出了代码,我正试图执行它,但面临一个问题。 因此,我已经对数据进行了预处理,并使用vector assembler将所有相关列合并到一个列中,我正在尝试拟合模型,并面临一个问题

public class Sparkdemo {

static SparkSession session = SparkSession.builder().appName("spark_demo")
        .master("local[*]").getOrCreate();

@SuppressWarnings("empty-statement")
public static void getData() {
    Dataset<Row> inputFile = session.read()
            .option("header", true)
            .format("csv")
            .option("inferschema", true)
            .csv("C:\\Users\\WildJasmine\\Downloads\\NKI_cleaned.csv");
    inputFile.show();
    String[] columns = inputFile.columns();
    int beg = 16, end = columns.length - 1;
    String[] featuresToDrop = new String[end - beg + 1];
    System.arraycopy(columns, beg, featuresToDrop, 0, featuresToDrop.length);
    System.out.println("rows are\n " + Arrays.toString(featuresToDrop));
    Dataset<Row> dataSubset = inputFile.drop(featuresToDrop);
    String[] arr = {"Patient", "ID", "eventdeath"};
    Dataset<Row> X = dataSubset.drop(arr);
    X.show();
    Dataset<Row> y = dataSubset.select("eventdeath");
    y.show();

    //Vector Assembler concept for merging all the cols into a single col
    VectorAssembler assembler = new VectorAssembler()
            .setInputCols(X.columns())
            .setOutputCol("features");

    Dataset<Row> dataset = assembler.transform(X);
    dataset.show();

    StringIndexer labelSplit = new StringIndexer().setInputCol("features").setOutputCol("label");
    Dataset<Row> data = labelSplit.fit(dataset)
            .transform(dataset);
    data.show();

    Dataset<Row>[] splitsX = data.randomSplit(new double[]{0.8, 0.2}, 42);
    Dataset<Row> trainingX = splitsX[0];
    Dataset<Row> testX = splitsX[1];

    LogisticRegression lr = new LogisticRegression()
            .setMaxIter(10)
            .setRegParam(0.3)
            .setElasticNetParam(0.8);

    LogisticRegressionModel lrModel = lr.fit(trainingX);
    Dataset<Row> prediction = lrModel.transform(testX);
    prediction.show();

}

public static void main(String[] args) {
    getData();

}}
我的最终结果是我需要一个使用features列的预测值


提前感谢。

如果要应用StringIndexer转换的数据帧的输入字段是向量,则会发生此错误。在Spark文档中,您可以看到输入列是一个字符串。此转换器对该列执行distinct命令,并使用对应于每个不同字符串值的整数创建一个新列。它对向量不起作用。

Hi@EmiCareOfCell44,那么我如何将逻辑回归应用于我的特征呢?是否有其他替代方法或不同的方法?为什么要使用“功能”列使用StringIndexer计算标签?。我认为你应该选择另一个领域。该问题与LR估计量无关。更改StringIndexer的输入列以计算标签。是的,它起作用了。我用其他列而不是功能更改了输入字段,结果成功了。谢谢
Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: The input column features must be either string type or numeric type, but got org.apache.spark.ml.linalg.VectorUDT@3bfc3ba7.
at scala.Predef$.require(Predef.scala:224)
at org.apache.spark.ml.feature.StringIndexerBase$class.validateAndTransformSchema(StringIndexer.scala:86)
at org.apache.spark.ml.feature.StringIndexer.validateAndTransformSchema(StringIndexer.scala:109)
at org.apache.spark.ml.feature.StringIndexer.transformSchema(StringIndexer.scala:152)
at org.apache.spark.ml.PipelineStage.transformSchema(Pipeline.scala:74)
at org.apache.spark.ml.feature.StringIndexer.fit(StringIndexer.scala:135)