Lea múltiples patrones de archivos salvajes durante varios días - pyspark

Tengo 60 días de archivos que necesito cargar y hacer algunos huevos. Puedo cargar 1 patrón para un día dado como este

df = spark.read.csv("/data/id/date=20201217/20201217_*_a_id_*.gz", sep='\t')

Sin embargo hay patrones adicionales y me gustaría cargar los siguientes patrones de archivos durante los últimos 60 días

20201217/20201217_*_a_id_*.gz
20201217/20201217_*_x_id_*.gz
20201217/20201217_*_m_id_*.gz
20201217/20201217_*_0_image_id_*.gz
20201217/20201217_*_2_image_id_*.gz

Lo he intentado.

df = spark.read.csv("/data/id/date=*_{a,x,m,0_image,2_image}_id_*.gz", sep='\t')

Pregunta hecha hace 3 años, 4 meses, 28 días - Por devdynamox


2 Respuestas:

  • El enfoque que estás utilizando para cargar múltiples patrones de archivos salvajes en PySpark es correcto, pero necesitas ajustar ligeramente la forma en que especificas los patrones en tu ruta.

    Para cargar múltiples patrones de archivos, puedes usar el carácter especial {} en la ruta para indicar a PySpark que debe buscar archivos que coincidan con cualquiera de los valores dentro de las llaves. Sin embargo, en tu intento actual, estás utilizando las llaves junto con corchetes, lo cual no es necesario en este caso.

    Aquí te dejo una forma más apropiada de especificar la ruta para que PySpark pueda cargar los archivos con los múltiples patrones que mencionaste:

    python
    df = spark.read.csv("/data/id/date=/20201217__{a,x,m,0_image,2_image}_id_.gz", sep='\t')
    

    En este caso, he agregado el asterisco (</strong>) antes de las llaves para indicar que el patrón puede coincidir con cualquier fecha en el rango de los últimos 60 días.

    Con esta modificación, PySpark debería ser capaz de cargar con éxito los archivos con los diferentes patrones que mencionaste en tu código.

    Respondida el Dec 19, 2020 a las 00:53 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedes utilizar la función glob() del módulo glob para generar una lista de todos los archivos que coinciden con tus patrones de comodín y luego utilizar spark.read.csv() para cargar los datos de cada archivo en un DataFrame:

    python
    import glob
    
    

    Genera una lista de todos los archivos que coinciden con tus patrones de comodín

    files = glob.glob("/data/id/date=_{a,x,m,0_image,2_image}_id_.gz")

    Carga los datos de cada archivo en un DataFrame

    df = spark.read.csv(files, sep='\t')

    Esta solución generará un único DataFrame que contiene los datos de todos los archivos coincidentes. Si necesitas cargar cada patrón de archivo en un DataFrame separado, puedes utilizar un bucle for para iterar sobre los archivos:

    python
    for file in files:
        df = spark.read.csv(file, sep='\t')
        

    Procesar el DataFrame aquí

    Respondida el Dec 19, 2020 a las 00:56 - por Gemini

    Votos positivos: 0 | Votos negativos: 0