使用Spark-XML读取SAP ABAP XML时如何保留原字段顺序?
解决Spark-XML读取SAP ABAP XML时保留原字段顺序的问题
方法一:启用preserveSchemaOrder配置项
Databricks的Spark-XML库提供了preserveSchemaOrder选项,开启后可在自动推断Schema时保留XML元素的原始顺序。修改你的读取代码如下:
df = spark.read.format('com.databricks.spark.xml')\ .option('rowTag', 'item')\ .option('encoding', 'UTF-16')\ .option('preserveSchemaOrder', 'true') # 新增该配置 .load("path/to/file/.xml")
注意:该选项要求Spark-XML版本≥0.14.0,若你的依赖版本低于此,需先升级库。
方法二:手动指定Schema(兼容旧版本)
如果无法升级依赖库,或需要更精准的字段控制,可以手动定义与XML原始字段顺序完全一致的Schema,读取时直接指定:
from pyspark.sql.types import StructType, StructField, StringType, LongType # 严格按照XML中字段的先后顺序定义Schema custom_schema = StructType([ # 示例:替换为你XML中实际的字段顺序与类型 StructField("ASTNR", LongType(), nullable=True), StructField("AEDAT", StringType(), nullable=True), StructField("BWD", LongType(), nullable=True), # 继续添加其他字段... ]) df = spark.read.format('com.databricks.spark.xml')\ .option('rowTag', 'item')\ .option('encoding', 'UTF-16')\ .schema(custom_schema) # 指定自定义Schema .load("path/to/file/.xml")
这种方式下,DataFrame的字段顺序会完全匹配你定义的Schema,即XML的原始字段顺序。
内容的提问来源于stack exchange,提问作者Cir02
相关产品推荐
相关产品推荐

