¿Una comparación entre fastparquet y pyarrow?

6 minutos de lectura

avatar de usuario de moshevi
moshevi

Después de algunas búsquedas, no pude encontrar una comparación exhaustiva de fastparquet y pyarrow.

encontré este blog correo (una comparación básica de velocidades).

y un github discusión que afirma que los archivos creados con fastparquet no son compatibles con AWS-athena (por cierto, ¿sigue siendo así?)

¿Cuándo/por qué usaría uno sobre el otro? ¿Cuáles son las principales ventajas y desventajas?


mi caso de uso específico es el procesamiento de datos con dask escribiéndolo en s3 y luego leyéndolo/analizándolo con AWS-athena.

  • Podría considerarse una pregunta de “opinión”, pero puede haber puntos técnicos que pueden dar una respuesta decente.

    – mdurante

    16 de julio de 2018 a las 15:23

  • ¿Está intentando construir un lago de datos usando Dask en lugar de AWS Glue? Lo pregunto porque estoy en el mismo barco.

    – rpanai

    17/07/2018 a las 16:00

  • no, estoy leyendo de un conjunto de datos de parquet s3, procesándolo y escribiéndolo en otro conjunto de datos de parquet. No tengo un problema de variedad de datos (que los lagos intentan resolver).

    – moshevi

    17 de julio de 2018 a las 18:08


  • Tenga en cuenta que el punto de referencia vinculado tiene un alcance muy limitado, presenta un solo tamaño de datos y un solo tipo de datos. Por lo tanto, realmente no puede sacar ninguna conclusión sobre cómo se escalan esas herramientas o cómo manejan otros tipos de datos. Y para python las cadenas son especialmente interesantes, ya que suelen ser un cuello de botella en muchos procesos.

    – jangorecki

    24 de septiembre de 2018 a las 4:54

Utilicé fastparquet y pyarrow para convertir datos de protobuf a parquet y consultar lo mismo en S3 usando Athena. Ambos funcionaron, sin embargo, en mi caso de uso, que es una función lambda, el archivo zip del paquete debe ser liviano, así que seguí adelante con fastparquet. (la biblioteca fastparquet ocupaba solo 1,1 mb, mientras que la biblioteca pyarrow ocupaba 176 mb y el límite del paquete Lambda es de 250 mb).

Usé lo siguiente para almacenar un marco de datos como archivo de parquet:

from fastparquet import write

parquet_file = path.join(filename + '.parq')
write(parquet_file, df_data)

  • Me gustaría señalar que al instalar fastparquet obtuve Downloading fastparquet-0.4.1.tar.gz (28.6 MB) hoy.

    – moshevi

    25 de agosto de 2020 a las 12:51

  • aws-data-wrangler proporciona capas preconstruidas que están optimizadas. Incluyen PyArrow y son definitivamente la forma más fácil de trabajar con Parquet en Lambda en la actualidad: github.com/awslabs/aws-data-wrangler

    – Poderes

    11 de septiembre de 2021 a las 13:07

Sin embargo, dado que la pregunta carece de criterios concretos, y vine aquí por una buena “elección predeterminada”, quiero afirmar que motor predeterminado de pandas para objetos DataFrame es pyarrow (ver pandas documentos).

Señalaría que el autor de la comparación de velocidad también es el autor de pyarrow 🙂 Puedo hablar sobre el caso de fastparquet.

Desde su punto de vista, lo más importante que debe saber es la compatibilidad. Athena no es uno de los objetivos de prueba para fastparquet (o pyarrow), por lo que debe probar a fondo antes de hacer su elección. Hay una serie de opciones que es posible que desee invocar (documentos) para la representación de fecha y hora, nulos, tipos, que pueden ser importantes para usted.

Escribir en s3 usando dask es ciertamente un caso de prueba para fastparquet, y creo que pyarrow tampoco debería tener problemas con eso.

  • Entonces, ¿por qué y cuándo usaría uno sobre el otro?

    – moshevi

    17 de julio de 2018 a las 19:09

  • Señalaría que el autor de la respuesta anterior también es un desarrollador colaborador de fastparquet 🙂

    – EfiZ

    20 de febrero de 2020 a las 20:48

Acabo de usar fastparquet para un caso para obtener datos de Elasticsearch y almacenarlos en S3 y consultar con Athena y no tuve ningún problema.

Usé lo siguiente para almacenar un marco de datos en S3 como archivo de parquet:

import s3fs
import fastparquet as fp
import pandas as pd
import numpy as np

s3 = s3fs.S3FileSystem()
myopen = s3.open
s3bucket="mydata-aws-bucket/"

# random dataframe for demo
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

parqKey = s3bucket + "datafile"  + ".parq.snappy"
fp.write(parqKey, df ,compression='SNAPPY', open_with=myopen)

Mi tabla se parece a esto en Athena:

CREATE EXTERNAL TABLE IF NOT EXISTS myanalytics_parquet (
  `column1` string,
  `column2` int,
  `column3` DOUBLE,
  `column4` int,
  `column5` string
 )
STORED AS PARQUET
LOCATION 's3://mydata-aws-bucket/'
tblproperties ("parquet.compress"="SNAPPY")

Avatar de usuario de Aladejubelo Oluwashina
Aladejubelo Oluwashina

Esta pregunta puede ser un poco antigua, pero estoy trabajando en el mismo problema y encontré este punto de referencia https://wesmckinney.com/blog/python-parquet-update/ . Según él, pyarrow es más rápido que fastparquet, no es de extrañar que sea el motor predeterminado que se usa en dask.

Actualizar:

Una actualización de mi respuesta anterior. He tenido más suerte escribiendo con pyarrow y leyendo con fastparquet en el almacenamiento en la nube de Google.

  • (pero, de nuevo, el autor de ese blog es el autor de flecha)

    – mdurante

    26 de julio de 2019 a las 13:04

  • Una actualización de mi respuesta anterior. He tenido más suerte escribiendo con pyarrow y leyendo con fastparquet en el almacenamiento en la nube de Google.

    – Aladejubelo Oluwashina

    14 sep 2019 a las 10:49

  • Mi caso de uso fue leer datos de hbase y copiarlos a Azure. Usé pyarrow para convertir el marco de datos de pandas en archivos de parquet. Pero cuando leí archivos de parquet de blob usando pyarrow, enfrenté muchos problemas relacionados con el esquema incluso después de definir el esquema. Ahora usa fastparquet para leer y escribir sin ningún problema de esquema.

    – Neeraj Sharma

    8 de abril de 2020 a las 6:35

  • ¿No es este el mismo punto de referencia que he vinculado en la pregunta?

    – moshevi

    3 de agosto de 2020 a las 19:15

  • pyarrow está predeterminado en pandas, fastparquet en dask

    – seanv507

    13 de enero de 2021 a las 8:40

  • (pero, de nuevo, el autor de ese blog es el autor de flecha)

    – mdurante

    26 de julio de 2019 a las 13:04

  • Una actualización de mi respuesta anterior. He tenido más suerte escribiendo con pyarrow y leyendo con fastparquet en el almacenamiento en la nube de Google.

    – Aladejubelo Oluwashina

    14 sep 2019 a las 10:49

  • Mi caso de uso fue leer datos de hbase y copiarlos a Azure. Usé pyarrow para convertir el marco de datos de pandas en archivos de parquet. Pero cuando leí archivos de parquet de blob usando pyarrow, enfrenté muchos problemas relacionados con el esquema incluso después de definir el esquema. Ahora usa fastparquet para leer y escribir sin ningún problema de esquema.

    – Neeraj Sharma

    8 de abril de 2020 a las 6:35

  • ¿No es este el mismo punto de referencia que he vinculado en la pregunta?

    – moshevi

    3 de agosto de 2020 a las 19:15

  • pyarrow está predeterminado en pandas, fastparquet en dask

    – seanv507

    13 de enero de 2021 a las 8:40

¿Ha sido útil esta solución?