【问题标题】:Parsing an XML Element to Dataframe in scala在scala中将XML元素解析为Dataframe
【发布时间】:2019-10-23 17:23:39
【问题描述】:

我有一个使用 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|耶稣受难日 | ....

【问题讨论】:

  • 有人可以帮助我吗?我需要加载从 2000 年至今的详细信息。谢谢。
  • 我提供的解决方案有帮助吗?

标签: xml scala dataframe element


【解决方案1】:

我会使用以下方法:

  • 将文件读入 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|
+----------+--------------+

【讨论】:

  • 他说他想从 Elem 创建 DF 而不是保存文件。
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2020-02-12
  • 2023-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多