Вы также можете достичь этого результата примерно так:
val data = Seq(
("VAR1, VAR2, VAR3, VAR4"),
("a, b, c, d"),
("ae, f, g, h")
)
val dataDS = sc.parallelize(data).toDS
val result = spark.read.option("inferSchema","true").option("header","true").csv(dataDS)
result.printSchema
result.show
Вывод выше:
root
|-- VAR1: string (nullable = true)
|-- VAR2: string (nullable = true)
|-- VAR3: string (nullable = true)
|-- VAR4: string (nullable = true)
и
+----+-----+-----+-----+
|VAR1| VAR2| VAR3| VAR4|
+----+-----+-----+-----+
| a| b| c| d|
| ae| f| g| h|
+----+-----+-----+-----+
Если ваши данные содержали цифры в одном из столбцов (исключая заголовок), тогда «inferSchema» должна правильно выводить этот столбец как числовой тип.
Например, используя это в качестве входных данных:
val data = Seq(
("VAR1, VAR2, VAR3, VAR4"),
("a, 1, c, d"),
("ae, 10, g, h")
)
Вывод будет:
root
|-- VAR1: string (nullable = true)
|-- VAR2: double (nullable = true)
|-- VAR3: string (nullable = true)
|-- VAR4: string (nullable = true)
и
+----+-----+-----+-----+
|VAR1| VAR2| VAR3| VAR4|
+----+-----+-----+-----+
| a| 1.0| c| d|
| ae| 10.0| g| h|
+----+-----+-----+-----+
Надеюсь, это поможет.