Azure Databricks:架构不匹配,无法使用 com.databricks.spark.xml 加载增量 xml 数据。 (将结构转换为数组)

问题描述 投票:0回答:1

我想加载增量 XML 数据,但对于一个字段,spark 有时会在单行时将模式推断为结构,而在有两行时将其推断为数组。

单行示例(Ship在这里被推断为struct coulmn):

Ships Ship ShipID 123 /ShipID /Ship /Ships

双行示例(此处将Ship推断为数组列):

Ships Ship ShipID 123 /ShipID ShipID 234 /ShipID /Ship /Ships

这是导致架构不匹配的原因。

你能帮助如何将结构转换为数组吗,或者你有任何其他解决方案

我试过铸造但没有成功。

pyspark xml-parsing azure-databricks
1个回答
0
投票

手动定义 XML 数据的模式,然后在数据框中使用它。

import org.apache.spark.sql.types._

val custom_schema = StructType(Seq(
  StructField("Ships", ArrayType(
    StructType(Seq(
      StructField("ShipID", StringType)
    ))
  ))
))

val df = spark.read
  .schema(custom_schema )
  .option("rootTag", "Ships")
  .option("rowTag", "Ship")
  .xml("dbfs:/***/shipfile1.xml")

这是用两个案例测试的。 case1 与单个 ShipId 。 case2 有两个 shipIds。

输入1

<Ships>
    <Ship>
        <ShipID>789</ShipID>
    </Ship>
</Ships>

输出1 |船舶 | |----------| | [[789]] |

输入2:

<Ships>
    <Ship>
        <ShipID>123</ShipID>
    </Ship>
    <Ship>
        <ShipID>234</ShipID>
    </Ship>
</Ships>

输出2:

船舶
[[123],[234]]

参考:databricks 文档 XML 文件。

© www.soinside.com 2019 - 2024. All rights reserved.