Aller au contenu principal

schéma XML

Analyse une chaîne XML et en déduit le schéma au format DDL.

Syntaxe

Python
from pyspark.sql import functions as sf

sf.schema_of_xml(xml, options=None)

parameter

parameter

Type

Description

xml

pyspark.sql.Column ou str

Une chaîne XML ou une colonne de chaîne repliable contenant une chaîne XML.

options

dictionnaire, facultatif

Options pour contrôler l'analyse. Accepte les mêmes options que la source de données XML.

parameter

Type

Description

xml

pyspark.sql.Column ou str

Une chaîne XML ou une colonne de chaîne repliable contenant une chaîne XML.

options

dictionnaire, facultatif

Options pour contrôler l'analyse. Accepte les mêmes options que la source de données XML.

Renvoie

pyspark.sql.Column: une représentation de chaîne d'un StructType analysé à partir du XML donné.

Exemples

Exemple 1 : analyse d'un XML simple avec un seul élément

Python
from pyspark.sql import functions as sf
df = spark.range(1)
df.select(sf.schema_of_xml(sf.lit('<p><a>1</a></p>')).alias("xml")).collect()
Output
[Row(xml='STRUCT<a: BIGINT>')]

Exemple 2 : Analyse d'un XML avec plusieurs éléments dans un tableau

Python
from pyspark.sql import functions as sf
df.select(sf.schema_of_xml(sf.lit('<p><a>1</a><a>2</a></p>')).alias("xml")).collect()
Output
[Row(xml='STRUCT<a: ARRAY<BIGINT>>')]

Exemple 3 : Analyse XML avec des options d'exclusion des attributs

Python
from pyspark.sql import functions as sf
schema = sf.schema_of_xml('<p><a attr="2">1</a></p>', {'excludeAttribute':'true'})
df.select(schema.alias("xml")).collect()
Output
[Row(xml='STRUCT<a: BIGINT>')]

Exemple 4 : Analyse de XML avec une structure complexe

Python
from pyspark.sql import functions as sf
df.select(
sf.schema_of_xml(
sf.lit('<root><person><name>Alice</name><age>30</age></person></root>')
).alias("xml")
).collect()
Output
[Row(xml='STRUCT<person: STRUCT<age: BIGINT, name: STRING>>')]

Exemple 5 : Analyse XML avec des tableaux imbriqués

Python
from pyspark.sql import functions as sf
df.select(
sf.schema_of_xml(
sf.lit('<data><values><value>1</value><value>2</value></values></data>')
).alias("xml")
).collect()
Output
[Row(xml='STRUCT<values: STRUCT<value: ARRAY<BIGINT>>>')]