Я использую Spark
DataFrame
для чтения текстового файла, и каждая строка разделяется одним пробелом, например, следующим образом (путь: d:/data/kmeans_data.txt
):
0.0 0.0 0.0
0.1 0.1 0.1
0.2 0.2 0.2
9.0 9.0 9.0
9.1 9.1 9.1
9.2 9.2 9.2
Я пытаюсь использовать DataFrame
для чтения этого текстового файла:
Dataset<Row> dataset = spark.read().text("file:/d:/data/kmeans_data.txt");
Однако он вызывает IllegalArgumentException
:
Исключение в потоке "main" java.lang.IllegalArgumentException: поле "features" не существует.
Доступные поля: значение
в org.apache.spark.sql.types.StructType $$ anonfun $ apply $ 1.apply (StructType.scala: 267)
в org.apache.spark.sql.types.StructType $$ anonfun $ apply $ 1.apply (StructType.scala: 267)
в scala.collection.MapLike $ class.getOrElse (MapLike.scala: 128)
в scala.collection.AbstractMap.getOrElse (Map.scala: 59)
в org.apache.spark.sql.types.StructType.apply (StructType.scala: 266)
в org.apache.spark.ml.util.SchemaUtils $ .checkColumnType (SchemaUtils.scala: 40)
в org.apache.spark.ml.clustering.KMeansParams $ class.validateAndTransformSchema (KMeans.scala: 93)
в org.apache.spark.ml.clustering.KMeans.validateAndTransformSchema (KMeans.scala: 254)
в org.apache.spark.ml.clustering.KMeans.transformSchema (KMeans.scala: 340)
в org.apache.spark.ml.PipelineStage.transformSchema (Pipeline.scala: 74)
в org.apache.spark.ml.clustering.KMeans.fit (KMeans.scala: 305)
at ml.dataframe.clustering.SPKMeans.main (SPKMeans.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498)
at com.intellij.rt.execution.application.AppMain.main (AppMain.java:147)
Как читать текстовый файл, используя spark DataFrame
в Java? Если имена столбцов и метка столбца отсутствуют, следует ли их создавать?