Что вы могли бы сделать, это вывести схему из первой строки файла, а затем соответствующим образом преобразовать фрейм данных:
- Удалите имя столбца из значений строки.
- Переименуйте столбцы
Вот как вы можете это сделать.Сначала давайте прочитаем ваши данные из файла и отобразим его.
// the options are here to get rid of potential spaces around the ",".
val df = spark.read
.option("ignoreTrailingWhiteSpace", true)
.option("ignoreLeadingWhiteSpace", true)
.csv("path/your_file.csv")
df.show(false)
+----------------+----------------+---------------------+
|_c0 |_c1 |_c2 |
+----------------+----------------+---------------------+
|Student_name=abc|student_grades=A|Student_gender=female|
|Student_name=Xyz|student_grades=B|Student_gender=male |
+----------------+----------------+---------------------+
Затем мы извлекаем отображение между именами по умолчанию и новыми именами, используя первую строку кадра данных.
val row0 = df.head
val cols = df
.columns
.map(c => c -> row0.getAs[String](c).split("=").head )
Наконец, мы избавляемся от имени столбцов с помощью split
на «=» и переименовываем столбцы, используя наше отображение:
val new_df = df
.select(cols.map{ case (old_name, new_name) =>
split(col(old_name), "=")(1) as new_name
} : _*)
new_df.show(false)
+------------+--------------+--------------+
|Student_name|student_grades|Student_gender|
+------------+--------------+--------------+
|abc |A |female |
|Xyz |B |male |
+------------+--------------+--------------+