【发布时间】:2021-09-01 08:20:00
【问题描述】:
我已经使用这样的结构类型从 XML 文件中读取了一些数据:
<CATALOG>
<TABLE at_name="Furniture">
<ROWDATA>
<ROW typeid="0" caseid="0" key="1" code="0"/>
<ROW typeid="1" caseid="0" key="1" code="0"/>
<ROW typeid="1" caseid="1" key="1" code="0"/>
</ROWDATA>
</TABLE>
<CATALOG>
读取 XML 的代码:
val furntitureDF = session.read
.option("rootTag", "CATALOG")
.option("rowTag", "TABLE")
.schema(getFurnitureSchema)
.xml(filePath)
.filter("at_name = 'Furniture'")
def getFurnitureSchema: StructType = {
val rowType = new StructType()
.add("_typeid", StringType)
.add("_caseid", StringType)
.add("_key", StringType)
.add("_code", StringType)
val rowDataType = new StructType()
.add("ROW", ArrayType(rowType))
val FurnitureTableType = new StructType()
.add("at_name", StringType)
.add("ROWDATA", rowDataType)
FurnitureTableType
}
我得到的输出:
| _name | ROWDATA |
|---|---|
| First | {[{0, 0, 1, 0 },{1, 0, 1, 0 },{1, 1, 1, 0 }]} |
如上所示,我得到了一些额外的括号,所以即使我使用了explode 函数,它也不起作用。预期的输出是:
| _name | ROWDATA | rowid |
|---|---|---|
| First | {0, 0, 1, 0 } | 1 |
| First | {1, 0, 1, 0 } | 2 |
| First | {1, 1, 1, 0 } | 3 |
关于如何获得此结果的任何想法?
【问题讨论】:
-
添加示例 xml 数据?
-
请看我的编辑
-
你为什么要创建
getFurnitureSchema架构? -
我使用它是因为 XML 很大,有很多表标签,并且每个属性名称(at_name)的列都不同
标签: xml scala function apache-spark databricks