繁体   English   中英

如何将具有不同属性模式的 XML 转换为 Scala 中的数据帧

[英]How to convert a XML with different attribute schemas into a dataframe in scala

我有以下 XML 文件,每个表都有不同的属性名称,并且每个 at_name 的架构都不同。 这是一个很长的文件,我只在这里发布了几行:

<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>
    <TABLE at_name="Cutlery">
        <ROWDATA>
            <ROW cutleryTypeid="0" color="Blue" code="0"/>
            <ROW cutleryTypeid="0" color="Blue" code="0"/>
        </ROWDATA>
    </TABLE>
    <TABLE at_name="Apparel">
        <ROWDATA>
            <ROW ApparelTypeid="1" color="Blue" barcode="0111"/>
            <ROW ApparelTypeid="0" color="Blue" barcode"1122"/>
        </ROWDATA>
    </TABLE>
<CATALOG>

为了读取 XML,我在 Scala 中为每个属性定义了自定义模式,这是用于家具的:

//Function to read XML furniture 
def getFurniture: 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 furniType = new StructType()
      .add("_at_name", StringType)
      .add("ROWDATA", rowDataType)

    furniType
  }

//In the main class
val cabinetDF = session.read
      .option("rootTag", "CATALOG")
      .option("rowTag", "TABLE")
      .schema(schema)
      .xml(filePath)
      .filter("_at_name = 'Furniture'")

当我运行这段代码时,我得到了这个数据框:

+---------+--------------------------------------------+
|_at_name |ROWDATA                                     |
+---------+--------------------------------------------+
|Furniture|{[{0, 0, 1, 0}, {1, 0, 1, 0}, {1, 1, 1, 0}]}|
+---------+--------------------------------------------+

我想要的输出是:

在此处输入图片说明

我尝试使用explode来转换上面的数据框,但它不起作用,因为我使用了struct type,它提供了一些额外的括号。 有没有其他方法可以获得所需的输出?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM