es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo analizar documentos xml en Palantir Foundry?

Tengo un conjunto de documentos .xml que quiero analizar.

Anteriormente había intentado analizarlos utilizando métodos que toman el contenido del archivo y lo almacenan en una única celda, sin embargo, he notado que esto no funciona en la práctica, ya que estoy viendo tiempos de ejecución cada vez más lentos, a menudo con una tarea que lleva horas en completarse:

Mi primera transformación toma el contenido del .xml y lo coloca en una sola celda, y una segunda transformación toma esta cadena y utiliza la biblioteca XML de Python para analizar la cadena en un documento. A partir de este documento, puedo extraer propiedades y devolver un DataFrame.

Estoy utilizando una UDF para realizar el proceso de asignación del contenido de la cadena a los campos que deseo.

¿Cómo puedo hacer que esto sea más rápido o funcione mejor con archivos .xml grandes?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En lugar de volcar todo el contenido del archivo .xml en una única celda, sería mejor utilizar el lector xml de PySpark para analizar directamente los archivos en un DataFrame.

    Primero, importa el módulo pyspark.sql.functions y utiliza spark.read para leer los archivos .xml como DataFrame:

    from pyspark.sql.functions import *
    df = spark.read.format('xml').options(rowTag='root').load('ruta/a/los/archivos/xml')
    

    La opción rowTag especifica la etiqueta raíz de los archivos .xml, y el método load lee todos los archivos en el directorio especificado.

    Una vez que los archivos .xml se cargan como DataFrame, puedes utilizar las funciones incorporadas de PySpark para extraer las propiedades que deseas:

    df.selectExpr("xpath('root/property1/text()') as property1", "xpath('root/property2/text()') as property2")
    

    Esto utiliza la sintaxis de XPath para extraer los valores de property1 y property2 de los archivos .xml.

    Este enfoque elimina la necesidad de una UDF y evita cargar todo el contenido del archivo .xml en la memoria, lo que resulta en un procesamiento más rápido y eficiente de archivos .xml grandes.

Comments are closed.