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.

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

Tags:  , , ,

Answer

  1. Avatar for 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:

    "gs://bucket/Data/year=2021/month={month}/day={day}/file.parquet"
    

    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:

    from pyspark.sql import SparkSession
    
    # crea una SparkSession
    spark = SparkSession.builder.appName("read-parquet").getOrCreate()
    
    # define el diccionario de pares de meses y días
    month_days_dict = {1: [1, 2, 3], 4: [10, 11, 12, 13]}
    
    # itera sobre el diccionario y lee los archivos parquet respectivos
    for month, days in month_days_dict.items():
        days_str = ",".join(str(day) for day in days)
        path = f"gs://bucket/Data/year=2021/month={month}/day={{{days_str}}}/file.parquet"
        df = spark.read.parquet(path)
        # realiza alguna operación con el dataframe aquí
    

    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 marcador days_str para escapar las llaves externas y producir una sola llave en la cadena final.

Comments are closed.