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.

¿Puedo escribir un archivo Parquet en el sistema de archivos local?

Nuevo en Parquet. Tengo un archivo Parquet, lo llamaremos momma.parquet, que fue producido al leer varios archivos Parquet “baby” en el sistema de archivos local. Los archivos Parquet “baby” fueron creados por pandas.DataFrame.to_parquet().

Lo que necesito hacer es escribir momma.parquet en el sistema de archivos. He leído muchos posts y la documentación de Parquet, y no he encontrado una solución para lo que asumí que sería un proceso bastante sencillo. La documentación de fastparquet menciona utilizar write('outfile.parq', df), que toma un dataframe como argumento, pero no debería ser necesario hacerlo.

Aquí está mi código que esperaba que lograra eso:

def make_momma_parquet(csv_filepath, parquet_filepath, numeric_cols, datetime_cols):
       """Crea un parquet a partir de una lista de otros archivos parquet y
       escríbelo en el sistema de archivos local
       :param csv_filepath: cadena
       :param parquet_filepath: cadena
       :param numeric_cols: lista de cadenas
       :param datetime_cols: lista de cadenas
       """

       # lista de archivos parquet
       parquet_files = []

       # df Dask fuente:
       ddf = dd.read_csv(csv_filepath, blocksize='600MB', dtype='object')

       # Bebé uno:
       # crea un dataframe de Pandas
       numeric_df = ddf[numeric_cols].compute()
       # hacer algunas operaciones con el dataframe de Pandas y luego
       # escribir el archivo parquet
       numeric_df.to_parquet(parquet_filepath)
       parquet_files.append(parquet_filepath)

       # Bebé dos:
       # crea un dataframe de Pandas
       datetime_df = ddf[datetime_cols].compute()
       # hacer algunas operaciones con el dataframe de Pandas y luego
       # escribir el archivo parquet
       datetime_df.to_parquet(parquet_filepath)
       parquet_files.append(parquet_filepath)

       # Mamá
       hist_parquet = fastparquet.ParquetFile(parquet_files)
       # escribir el archivo parquet en el sistema de archivos
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para escribir el archivo momma.parquet en el sistema de archivos, puedes usar la función fastparquet.writer.write. Aquí hay un fragmento de código actualizado que debería lograr esto:

    import fastparquet
    
    def make_momma_parquet(csv_filepath, parquet_filepath, numeric_cols, datetime_cols):
        """"Crear un archivo parquet a partir de una lista de otros archivos parquet y
        escribirlo en el sistema de archivos local
        :param csv_filepath: cadena de texto
        :param parquet_filepath: cadena de texto
        :param numeric_cols: lista de cadenas de texto
        :param datetime_cols: lista de cadenas de texto
        """
    
        # lista de archivos parquet
        parquet_files = []
    
        # DataFrame Dask de origen:
        ddf = dd.read_csv(csv_filepath, blocksize='600MB', dtype='object')
    
        # Bebé uno:
        # crear un DataFrame Pandas
        numeric_df = ddf[numeric_cols].compute()
        # hacer algo con el DataFrame Pandas y luego
        # escribir el archivo parquet
        numeric_df.to_parquet(parquet_filepath)
        parquet_files.append(parquet_filepath)
    
        # Bebé dos:
        # crear un DataFrame Pandas
        datetime_df = ddf[datetime_cols].compute()
        # hacer algo con el DataFrame Pandas y luego
        # escribir el archivo parquet
        datetime_df.to_parquet(parquet_filepath)
        parquet_files.append(parquet_filepath)
    
        # Mamá
        hist_parquet = fastparquet.ParquetFile(parquet_files)
        # escribir el archivo parquet en el sistema de archivos
        fastparquet.writer.write(parquet_filepath, hist_parquet.to_pandas())
    

    En este código actualizado, importamos fastparquet y usamos la función fastparquet.writer.write para escribir el DataFrame combinado hist_parquet en el sistema de archivos. La función to_pandas se utiliza para convertir hist_parquet en un DataFrame de Pandas antes de escribirlo en el disco.

Comments are closed.