Leyendo archivos Parquet en GCP usando comodines en Spark.
Estoy tratando de leer archivos parquet usando spark,
si quiero leer los datos de junio, haré lo siguiente:
"gs://bucket/Data/year=2021/month=6/file.parquet"
si quiero leer los datos de todos los meses, haré lo siguiente:
"gs://bucket/Data/year=2021/month=*/file.parquet"
si quiero leer los primeros dos días de mayo:
"gs://bucket/Data/year=2021/month=5/day={1,2}file.parquet"
si quiero leer noviembre y diciembre:
"gs://bucket/Data/year=2021/month={11,12}/file.parquet"
ya te haces una idea… pero ¿qué pasa si tengo un diccionario de pares clave-valor de mes, días…
por ejemplo {1: [1,2,3], 4: [10,11,12,13]} -> lo cual significa que necesito leer los días [1,2,3] de enero y los días [10,11,12,13] de abril. ¿Cómo reflejaría eso como un comodín en la ruta?
Gracias
davy.ai
Para reflejar el diccionario de pares clave-valor de meses y días como un comodín para leer archivos parquet en Spark, puedes usar el siguiente patrón:
Aquí, puedes usar la notación de llaves para los marcadores de mes y día, los cuales serán reemplazados por sus respectivos valores en tiempo de ejecución.
Para implementar el diccionario de pares de meses y días, puedes iterar sobre las claves y valores y sustituirlos en la ruta usando el método
.format()
. A continuación, se muestra un ejemplo de implementación en Python utilizando PySpark:En este ejemplo, utilizamos f-strings para sustituir los marcadores de mes y día en la cadena de la ruta, y luego pasamos esa ruta al método
spark.read.parquet()
para leer los datos.Ten en cuenta que convertimos el arreglo
days
en una cadena separada por comas utilizando",".join()
para ajustarnos a la sintaxis del comodín. Además, debes notar que necesitamos utilizar dos llaves dobles alrededor del marcadordays_str
para escapar las llaves externas y producir una sola llave en la cadena final.