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.

Error de DataSet de Kedro al cargar PartitionedDataSet

Estoy utilizando PartitionedDataSet para cargar varios archivos csv desde el almacenamiento de Azure Blob. He definido mi conjunto de datos en el catálogo de datos de la siguiente manera.

my_partitioned_data_set:
  type: PartitionedDataSet
  path: my/azure/folder/path
  credentials: mis credenciales
  dataset: pandas.CSVDataSet
  load_args:
    sep: ";"
    encoding: latin1

También he definido un nodo para combinar todas las particiones. Pero al cargar cada archivo como un CSVDataSet, kedro no está teniendo en cuenta los load_args, por lo que estoy obteniendo el siguiente error.

Error al cargar los datos del conjunto de datos CSVDataSet(filepath=my/azure/folder/path, load_args={}, protocol=abfs, save_args={'index': False}).
El códec 'utf-8' no puede decodificar el byte 0x8b en la posición 1: byte de inicio no válido

El error muestra que al cargar el CSVDataSet, kedro no está considerando los load_args definidos en el PartitionedDataSet y pasa un diccionario vacío como parámetro load_args a CSVDataSet.
Estoy siguiendo la documentación en https://kedro.readthedocs.io/en/stable/05_data/02_kedro_io.html#partitioned-dataset.
No entiendo dónde estoy cometiendo errores.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Kedro, el mensaje de error sugiere que el parámetro load_args en el PartitionedDataSet no se aplicó al cargador de datos subyacente CSVDataSet.

    Una posible solución es modificar el parámetro load_args en el PartitionedDataSet para incluir el parámetro encoding requerido.

    load_args:
        sep: ";"
        encoding: 'utf-8'
    

    Alternativamente, si es necesario pasar los load_args dinámicamente, entonces a nivel de Node, el PartitionedDataSet puede cargarse dinámicamente con los respectivos load_args como se muestra a continuación:

    from kedro.io import DataCatalog, PartitionedDataSet, load_context
    
    load_context()
    
    my_partitioned_data_set = PartitionedDataSet(
        path="mi/ruta/de/carpeta/azure",
        credentials="mis credenciales",
        dataset=pandas.CSVDataSet,
        load_args=lambda path: dict(sep=";", encoding="latin1"),
    )
    
    catalog = DataCatalog({"my_partitioned_data_set": my_partitioned_data_set})
    
    node = Node(
        func=my_func,
        inputs="my_partitioned_data_set",
        outputs="combined_data",
        tags=["my_tag"],
    )
    

    Observa la diferencia en el parámetro load_args que ahora se define como una función lambda que devuelve un diccionario de parámetros. Esto permite que cada conjunto de datos particionado tenga sus parámetros específicos load_args.

Comments are closed.