首页 > 解决方案 > 在scala中将XML元素解析为Dataframe

问题描述

我在使用 Spark 的 Scala 中对 SOAP 请求有一个 xml 响应,我想将其转换为 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>

输出:数据框:

|日期 |Desc | |2019-01-01|元旦| |2019-04-19|耶稣受难日 | ……

标签: xmlscaladataframeelement

解决方案


我会使用以下方法:

  • 将文件读入 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))
})
  • 使用 .toDF 将此 RDD 转换为数据帧
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|
+----------+--------------+

推荐阅读