Разбор XML-элемента в Dataframe в Scala - PullRequest
2 голосов
/ 08 июня 2019

У меня есть XML-ответ на запрос SOAP в Scala с Spark, который я хочу преобразовать в Dataframe, чтобы я мог добавить его в таблицу кустов.

Я пробовал databricks.spark.xml, но он может напрямую загружать только XML-файлы. Я не могу найти способ загрузить переменную xml (Elem)

Введите:

    <XML>
    <hol_cal date="2019-01-01" Desc="New Year's Day"/>
    <hol_cal date="2019-04-19" Desc="Good Friday"/> 
    <hol_cal date="2019-04-22" Desc="Easter Monday"/>
    ...
    ...
    ...
    </XML>

Выход: Фрейм данных:

| Date | Desc | | 2019-01-01 | Новый год | | 2019-04-19 | Страстная пятница | ....

1 Ответ

0 голосов
/ 08 июня 2019

Я бы использовал следующий метод:

  • Считать файл в 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|
+----------+--------------+
...