0

对于一个项目,我需要以 SDMX 标准格式解析包含此类结构(在其他标签内)的 XML 文件:

<generic:Obs>
  <generic:ObsDimension value="2021-07"/>
  <generic:ObsValue value="128.2"/>
  <generic:Attributes>
    <generic:Value id="OBS_STATUS" value="A"/>
    <generic:Value id="OBS_QUAL" value="DEF"/>
    <generic:Value id="OBS_TYPE" value="A"/>
  </generic:Attributes>
</generic:Obs>
<generic:Obs>
  <generic:ObsDimension value="2021-06"/>
  <generic:ObsValue value="128.4"/>
  <generic:Attributes>
    <generic:Value id="OBS_STATUS" value="A"/>
    <generic:Value id="OBS_QUAL" value="DEF"/>
    <generic:Value id="OBS_TYPE" value="A"/>
  </generic:Attributes>
</generic:Obs>

理想情况下,我想生成具有以下结构的数据框(所有列都可以为空):

root
 |-- id: long
 |-- dimension: timestamp   // From the ObsDimension tag
 |-- value: float           // From the ObsValue tag
 |-- status: char           // From the Value tag with id="OBS_STATUS"
 |-- quality: string        // From the Value tag with id="OBS_QUAL"
 |-- type: char             // From the Value tag with id="OBS_TYPE"

第一次尝试只取值,我尝试使用以下代码,但它返回一个空数据框(没有列也没有行):

val xml: String = Controller.requestTo(url)
val path: String = "/data.xml"
dbutils.fs.put(path, xml, true)

val df = spark.read.format("com.databricks.spark.xml")
                   .option("rowTag", "generic:ObsValue")
                   .load(path)

你知道我怎么能做到这一点吗?我必须使用 Scala,所以任何 Python 解决方案在这里都不会很有用(除非你知道如何从 Scala 调用 python 库函数)。

谢谢 !

4

0 回答 0