J'utilise des pandas dans un conteneur et j'obtiens l'erreur suivante:
Traceback (most recent call last):
File "/volumes/dependencies/site-packages/celery/app/trace.py", line 374, in trace_task
R = retval = fun(*args, **kwargs)
File "/volumes/dependencies/site-packages/celery/app/trace.py", line 629, in __protected_call__
return self.run(*args, **kwargs)
File "/volumes/code/autoai/celery/data_template/api.py", line 16, in run_data_template_task
data_template.run(data_bundle, columns=columns)
File "/volumes/code/autoai/models/data_template.py", line 504, in run
self.to_parquet(data_bundle, columns=columns)
File "/volumes/code/autoai/models/data_template.py", line 162, in to_parquet
}, parquet_path=data_file.path, directory="", dataset=self)
File "/volumes/code/autoai/core/datasets/parquet_converter.py", line 46, in convert
file_system.write_dataframe(parquet_path, chunk, directory, append=append)
File "/volumes/code/autoai/core/file_systems.py", line 76, in write_dataframe
append=append)
File "/volumes/dependencies/site-packages/pandas/core/frame.py", line 1945, in to_parquet
compression=compression, **kwargs)
File "/volumes/dependencies/site-packages/pandas/io/parquet.py", line 256, in to_parquet
impl = get_engine(engine)
File "/volumes/dependencies/site-packages/pandas/io/parquet.py", line 40, in get_engine
return FastParquetImpl()
File "/volumes/dependencies/site-packages/pandas/io/parquet.py", line 180, in __init__
import fastparquet
File "/volumes/dependencies/site-packages/fastparquet/__init__.py", line 8, in <module>
from .core import read_thrift
File "/volumes/dependencies/site-packages/fastparquet/core.py", line 13, in <module>
from . import encoding
File "/volumes/dependencies/site-packages/fastparquet/encoding.py", line 11, in <module>
from .speedups import unpack_byte_array
File "__init__.pxd", line 861, in init fastparquet.speedups
ValueError: numpy.ufunc has the wrong size, try recompiling. Expected 192, got 216
J'ai lu sur autres réponses que ce message apparaît lorsque les pandas sont compilés avec une version numpy plus récente que celle que vous avez installée. Mais mettre à jour les deux pandas et Numpy n'a pas fonctionné pour moi. J'ai essayé de savoir si j'ai quelques versions de numpy, mais pip show numpy
semble afficher la dernière version.
De plus, cela ne se produit que très rarement lorsque je déploie localement et non sur le serveur.
Des idées comment y remédier? Ou au moins comment déboguer mes versions de numpy et pandas (s'il y a plusieurs versions, comment puis-je vérifier cela)
J'ai essayé: mettre à jour les deux paquets, puis les supprimer et les réinstaller. Aucune aide là-bas.
La réponse était que fastparquet (un paquet utilisé par les pandas) utilisait un fichier binaire numpy plus ancien pour une raison quelconque. La mise à jour de ce paquet a aidé. Je suppose que si quelqu'un d'autre résout ce problème, essayer de mettre à jour tous les paquets associés (qui utilisent numpy) sera la bonne solution
TLDR: Si docker Ajouter:
RUN pip install numpy
avant vous installez des pandas (probablement juste votre pip install -r requis.txt) et cela fonctionnera à nouveau.
Je fais cela dans les pandas qui construisent des dockers dans Alpine et je rencontre le même problème et cela vient JUSTE apparaître (le 27 décembre 2018) pour une construction qui fonctionnait très bien auparavant.
Assurez-vous que la bonne version de numpy est installée sur /volumes/dependencies/site-packages/
et que vous l’utilisez.
J'ai eu le même problème et j'ai essayé toutes les réponses ci-dessus (au moment de la rédaction). La seule chose qui a fonctionné pour moi a été de passer à pyarrow
.
Je me suis ensuite assuré de spécifier le moteur pyarrow
lors de l'utilisation de parquet dans des pandas. Bien que les pandas devraient utiliser par défaut le moteur pyarrow
avant fastparquet
selon la documentation.
pd.read_parquet('./path', engine='pyarrow')