Более простой способ, вероятно, состоит в том, чтобы начать с CSV-файла и прочитать его непосредственно в виде кадра данных (указав схему). Вы можете увидеть пример здесь: Предоставить схему при чтении CSV-файла в качестве кадра данных .
Когда данные уже существуют в СДР, вы можете использовать toDF()
для преобразования в фрейм данных. Эта функция также принимает имена столбцов в качестве входных данных. Чтобы использовать эту функциональность, сначала импортируйте импликные эффекты, используя объект SparkSession
:
val spark: SparkSession = SparkSession.builder.getOrCreate()
import spark.implicits._
Поскольку СДР содержит строки, его необходимо сначала преобразовать в кортежи, представляющие столбцы в кадре данных. В этом случае это будет RDD[(String, String, String, Int)]
, поскольку имеется четыре столбца (последний столбец age
заменен на int, чтобы проиллюстрировать, как это можно сделать).
Предполагая, что входные данные находятся в rdd
:
val header = "name,account,state,age"
val df = rdd.map(row => row.split(","))
.map{ case Array(name, account, state, age) => (name, account, state, age.toInt)}
.toDF(header.split(","):_*)
Результирующий кадр данных:
+----+-----------+-----+---+
|name| account|state|age|
+----+-----------+-----+---+
|Mike|2222-003330| NY| 34|
|Kate|3333-544444| LA| 32|
|Abby|4444-234324| MA| 56|
+----+-----------+-----+---+