我想加载增量 XML 数据,但对于一个字段,spark 有时会在单行时将模式推断为结构,而在有两行时将其推断为数组。
单行示例(Ship在这里被推断为struct coulmn):
Ships Ship ShipID 123 /ShipID /Ship /Ships
双行示例(此处将Ship推断为数组列):
Ships Ship ShipID 123 /ShipID ShipID 234 /ShipID /Ship /Ships
这是导致架构不匹配的原因。
你能帮助如何将结构转换为数组吗,或者你有任何其他解决方案
我试过铸造但没有成功。
手动定义 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 文件。