对于一个项目,我需要以 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 库函数)。
谢谢 !