web-dev-qa-db-fra.com

Comment identifier le backend des Pandas pour Parquet

Je comprends que Pandas peut lire et écrire vers et depuis des fichiers Parquet en utilisant différents backends: pyarrow et fastparquet.

J'ai une distribution Conda avec la distribution Intel et "ça marche": je peux utiliser pandas.DataFrame.to_parquet. Cependant je n'ai pas pyarrow installé donc je suppose que fastparquet est utilisé (que je ne trouve pas non plus).

Existe-t-il un moyen d'identifier le backend utilisé?

9
Cedric H.

Une méthode serait d'appeler show_versions() qui listera les dépendances (ainsi que d'autres éléments d'environnement):

pd.show_versions()

INSTALLED VERSIONS
------------------
commit: None
python: 3.6.0.final.0
python-bits: 64
OS: Windows
OS-release: 7
machine: AMD64
processor: Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.23.0
pytest: 3.0.5
pip: 9.0.3
setuptools: 27.2.0
Cython: 0.25.2
numpy: 1.14.3
scipy: 1.1.0
pyarrow: None
xarray: None
IPython: 5.1.0
sphinx: 1.5.1
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2016.10
blosc: None
bottleneck: 1.2.1
tables: 3.4.3
numexpr: 2.6.5
feather: None
matplotlib: 2.2.2
openpyxl: 2.4.1
xlrd: 1.0.0
xlwt: 1.2.0
xlsxwriter: 0.9.6
lxml: 3.7.2
bs4: 4.5.3
html5lib: 0.9999999
sqlalchemy: 1.1.5
pymysql: None
psycopg2: None
jinja2: 2.9.4
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None

Ici, incidemment, je n'ai ni pyarrow ni fastparquet installé

En fait, vous pouvez appeler pd.io.parquet.get_engine('auto'):

In[193]:
pd.io.parquet.get_engine('auto')

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-193-929185e5aca8> in <module>()
----> 1 pd.io.parquet.get_engine('auto')

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parquet.py in get_engine(engine)
     27             pass
     28 
---> 29         raise ImportError("Unable to find a usable engine; "
     30                           "tried using: 'pyarrow', 'fastparquet'.\n"
     31                           "pyarrow or fastparquet is required for parquet "

ImportError: Unable to find a usable engine; tried using: 'pyarrow', 'fastparquet'.
pyarrow or fastparquet is required for parquet support

Comme je n'ai pas non plus installé cela déclenche une ImportError, probablement sur votre environnement, cela retournera en fait le moteur installé

Et après avoir installé fastparquet j'obtiens maintenant:

In[194]:
pd.io.parquet.get_engine('auto')

Out[194]: <pandas.io.parquet.FastParquetImpl at 0xf5582b0>

Et si nous regardons le class:

In[202]:
impl = pd.io.parquet.get_engine('auto')
impl.__class__

Out[202]: pandas.io.parquet.FastParquetImpl

il nous dit de quelle implication il s'agit.

Si pyarrow est installé, on obtiendrait:

>>> pd.io.parquet.get_engine('auto')
<pandas.io.parquet.PyArrowImpl object at 0xa13fb1ef0>
>>> pd.io.parquet.get_engine('auto').__class__
<class 'pandas.io.parquet.PyArrowImpl'>

Il suffit d'exécuter ces 2 commandes dans linux Shell/bash

pip install pyarrow

pip install fastparquet
3
ANKIT CHOPADE