У меня есть набор данных с 5408 столбцами, все они напечатаны так:
_c0 | _c1 | _c2 | _c3 | _c4 | _c5 | _c6 | _c7 | _c8 | _c9 | | -0,169 | -0,025 | -0,010 | -0,041 | -0,045 | -0,069 | 0,038 | 0,014 | 0,008 | -0,014 |.
Я хочу собрать все столбцы вместе и разделить метку, но у меня есть эта ошибка, которая означает, что мои столбцы не поддерживаются:
xception в потоке "main" java.lang.IllegalArgumentException: строка типа данных столбца _c0 не поддерживается.
Строка типа данных столбца _c1 не поддерживается.
Строка типа данных столбца _c2 не поддерживается.
Строка типа данных столбца _c3 не поддерживается.
Строка типа данных столбца _c4 не поддерживается.
Я хочу создать модель ML, поэтому толстый у меня есть:
Dataset<Row> csvData = spark.read()
.option("header", false)
.option("inferSchema", true)
.csv("src/main/resou`enter code here`rces/K9.data");
StringIndexer conditionIndexer = new StringIndexer ()
.setInputCol("_c5408")
.setOutputCol("_c5408Index");
csvData = conditionIndexer.fit(csvData).transform(csvData);
//Cleaning data
List<org.apache.spark.sql.Column> list = new ArrayList<org.apache.spark.sql.Column>();
for (String col : csvData.columns()) {
list.add(when(csvData.col(col).equalTo("?"), 0).otherwise(csvData.col(col)).alias(col));
}
csvData = csvData.select(list.toArray(new org.apache.spark.sql.Column[0]));
List<org.apache.spark.sql.Column> list_null = new ArrayList<org.apache.spark.sql.Column>();
for (String col : csvData.columns()) {
list_null.add(when(csvData.col(col).isNull(), 0).otherwise(csvData.col(col)).alias(col));
}
csvData = csvData.select(list_null.toArray(new org.apache.spark.sql.Column[0]));
csvData = csvData.na().fill(0, csvData.columns());
csvData.groupBy(col("_c5408"),col("_c5408Index")).count().show();
ArrayList<String> inputColsList = new ArrayList<>(Arrays.asList(csvData.columns()));
//Make single features column for feature vectors
inputColsList.remove("_c5408Index");
VectorAssembler vectorAssembler = new VectorAssembler()
.setInputCols(inputColsList.parallelStream().toArray(String[]::new))
.setOutputCol("features");
`enter code here` Dataset<Row> modelInputData = vectorAssembler.transform(csvData)
.select("_c5408Index", "features")
.withColumnRenamed("_c5408Index", "label");
Ошибка в том случае, если записан набор данных modelInputData = vectorAssembler.transform (csvData).
Схема
|-- _c0: string (nullable = true)
|-- _c1: string (nullable = true)
|-- _c2: string (nullable = true)
|-- _c3: string (nullable = true)
|-- _c4: string (nullable = true)
|-- _c5: string (nullable = true)
|-- _c6: string (nullable = true)
|-- _c7: string (nullable = true)
|-- _c8: string (nullable = true)
|-- _c9: string (nullable = true)
|-- _c10: string (nullable = true)
|-- _c11: string (nullable = true)
|-- _c12: string (nullable = true)
|-- _c13: string (nullable = true)
|-- _c14: string (nullable = true)
|-- _c15: string (nullable = true)
|-- _c16: string (nullable = true)
|-- _c17: string (nullable = true)
|-- _c18: string (nullable = true)
|-- _c19: string (nullable = true)
|-- _c20: string (nullable = true)
c5408Index: double (nullable = false)
Наборы данных выглядят как