Я бы использовал следующий метод:
- Считать файл в RDD (где каждый элемент теперь состоит из одной строки в файле XML)
val rawXML = sc.textFile(inputFileLocation)
- Создайте схему класса дела, как показано ниже:
case class DateSchema(date: String, desc: String)
- Преобразовать каждую строку в элемент класса дел DateSchema. Возможно, вы захотите сначала отфильтровать строки, которые не содержат строк date и Desc.
val parsedXML = rawXML.filter(row => row.contains("date") && row.contains("Desc")).map(row => {
val splitRow = row.split("\"")
DateSchema(splitRow(1), splitRow(3))
})
- Преобразовать этот RDD в кадр данных, используя .toDF
val dateDF = parsedXML.toDF
dateDF.show
+----------+--------------+
| date| desc|
+----------+--------------+
|2019-01-01|New Year's Day|
|2019-04-19| Good Friday|
|2019-04-22| Easter Monday|
+----------+--------------+