Как читать текстовый файл без имени столбца, используя спарк Dataframe в Java - PullRequest
0 голосов
/ 29 августа 2018

Я использую 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? Если имена столбцов и метка столбца отсутствуют, следует ли их создавать?

1 Ответ

0 голосов
/ 29 августа 2018

По вашим входным данным.

Вы хотели бы загрузить свой текстовый файл в spark, поскольку файл CSV с разделителем является пробелом. Вы также можете загрузить данные без заголовков с опцией header

как в следующем примере кода.

  val conf = new SparkConf().setAppName("learning").setMaster("local[2]")

  val session = SparkSession.builder().config(conf).getOrCreate()
    val schema =  DataTypes.createStructType(Array(
        DataTypes.createStructField("f1",DataTypes.DoubleType,false),
        DataTypes.createStructField("f2",DataTypes.DoubleType,false),
        DataTypes.createStructField("f3",DataTypes.DoubleType,false)
      ))

  val df = session.read
    .format("csv")
    .option("header", false)
    .option("delimiter", " ")
    .schema(schema)
    .load("file:/d:/data/kmeans_data.txt")
...