Преобразуйте данные в rdd и проанализируйте - PullRequest
0 голосов
/ 07 мая 2019

Я новичок в spark и имею данные ниже в формате csv, которые я хочу преобразовать в правильный формат.

CSV-файл без заголовка

Student_name=abc, student_grades=A, Student_gender=female
Student_name=Xyz, student_grades=B, Student_gender=male

Теперь я хочу поместить его в rdd с созданием заголовка

Student_Name   student_grades   student_gender 
abc            A                female
Xyz            B                male

Также я хочу получить список студентов с оценками A, B и C

1 Ответ

0 голосов
/ 07 мая 2019

Что вы могли бы сделать, это вывести схему из первой строки файла, а затем соответствующим образом преобразовать фрейм данных:

  1. Удалите имя столбца из значений строки.
  2. Переименуйте столбцы

Вот как вы можете это сделать.Сначала давайте прочитаем ваши данные из файла и отобразим его.

// 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          |
+------------+--------------+--------------+
...