V moderných dátových potrubiach sa často dostávajú do Tieto formáty sú flexibilné, umožňujú hierarchické vzťahy a tabuľky, ale môžu byť náročné na zvládnutie tradičných relačných prístupov. . nested JSON or XML formats analytics, reporting, or loading into data warehouses like Snowflake V tomto blogu sa zameriavame na používať funkciu, ktorá je opakovane použiteľná, . dynamic, recursive approach to parsing nested JSON and XML in Spark flatten_df_recursive Real-World Scenario Predstavte si prácu na : e-commerce company Údaje o zákazníkoch sú uložené v súboroch JSON s vstavanými štruktúrami pre adresy, objednávky a informácie o platbe. Podrobnosti o objednávke môžu obsahovať množiny položiek, z ktorých každá obsahuje informácie o produkte. Spoločnosť Legacy Partners odosiela súbory XML na účely aktualizácie zásob a prepravy. Your goal: Tieto údaje nahrajte do Databricks/Spark. Dynamicky vyrovnajte všetky hniezdené štruktúry (bez hardcodovania názvov stĺpcov). Uložiť plochý výstup pre analýzu, ML alebo podávanie správ. Challenges: Neznáme úrovne hnisu. Rastliny s hustými štruktúrami. Časté zmeny plánu. To je presne tam, kde Prichádza v rukách. recursive flattening The Recursive Flatten Function Tu je základná funkcia: from pyspark.sql.types import StructType, ArrayType from pyspark.sql.functions import col, explode_outer def flatten_df_recursive(df): """ Recursively flattens all nested StructType and ArrayType columns in a Spark DataFrame. Supports multiple nested levels for JSON/XML data. """ # Track complex fields (StructType or ArrayType) complex_fields = [(field.name, field.dataType) for field in df.schema.fields if isinstance(field.dataType, (StructType, ArrayType))] while complex_fields: col_name, col_type = complex_fields.pop(0) # If StructType, expand its fields with aliases if isinstance(col_type, StructType): expanded_cols = [ col(f"{col_name}.{nested_field.name}").alias(f"{col_name}_{nested_field.name}") for nested_field in col_type.fields ] df = df.select("*", *expanded_cols).drop(col_name) # If ArrayType, explode the array elif isinstance(col_type, ArrayType): df = df.withColumn(col_name, explode_outer(col(col_name))) # Refresh the complex fields list after modifications complex_fields = [(field.name, field.dataType) for field in df.schema.fields if isinstance(field.dataType, (StructType, ArrayType))] return df Key Features: Plne dynamické: Rieši ľubovoľný počet nestedovaných úrovní štruktúry alebo array. Žiadne hardcodovanie: Funguje aj v prípade, že sa neskôr pridajú nové polia. Podpora množín: Automaticky exploduje množiny do riadkov. XML & JSON friendly: Funguje s ľubovoľnými hierarchickými údajmi načítanými do Spark. Reading Nested JSON in Spark Čítať JSON súbor s multiline df = spark.read.option("multiline", "true").json("dbfs:/FileStore/temp/orders.json") display(df) Prenos dátového rámca JSON do Willová , aby boli údaje pripravené na analýzu alebo podávanie správ. flatten_df_recursive flatten all nested structs and arrays flat_df = flatten_df_recursive(df) display(flat_df) Reading Nested XML in Spark xml_path = "/dbfs/data/nested_orders.xml" df = spark.read.format("xml") \ .option("rowTag", "order") \ .load(xml_path) flat_df = flatten_df_recursive(df) flat_df.show(truncate=False) "rowTag" označuje opakujúci sa prvok XML, ktorý predstavuje jeden záznam. Hniezdené prvky a množiny sú automaticky spracované pomocou funkcie „flatten_df_recursive“. Why This Approach Matters Dynamické spracovanie schémy: Nie je potrebné prepisovať plochú logiku, ak sa zmení štruktúra JSON/XML. Podporuje viacúrovňové hniezdenie: pracuje pre hlboko hniezdené štruktúry a zostavy. Škálovateľné: Môže spracovávať veľké súbory na Spark bez načítania všetkého do pamäte. Opakovateľné: Funguje pre ľubovoľný zdroj – JSON, XML, Snowflake, Delta alebo Parquet s vloženými štruktúrami. Summary Nested JSON a XML sú bežné v moderných dátových potrubiach, ale tradičné prístupy k vyrovnaniu zlyhávajú s hlbokým hniezdením alebo zmenami schémy. Môžete si: recursive, dynamic Spark flattening function Automaticky vyrovná akúkoľvek hĺbku hniezda. Nastavte štruktúry a štruktúry bez problémov. Integrujte s analytikami, ML potrubím a skladmi, ako je Snowflake. Tento prístup je obzvlášť užitočný pre , , , a Štruktúra údajov sa často vyvíja. ETL pipelines data lake ingestion reporting systems Priložil som celú správu pre vašu referenciu. Notebook správa