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óduloglob
para generar una lista de todos los archivos que coinciden con tus patrones de comodín y luego utilizarspark.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