ошибка с мгновенным запуском при импорте fastparquet в python

Я установил следующие модули на свой сервер EC2, на котором уже установлены python (3.6) и anaconda:

  • резкий
  • пиарроу
  • s3fs
  • фастпарк

кроме fastparquet все остальное работает на импорт. Когда я пытаюсь импортировать fastparquet, возникает следующая ошибка:

[username@ip8 ~]$ conda -V
conda 4.2.13
[username@ip-~]$ python
    Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 12:22:00)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
     import fastparquet
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/username/anaconda3/lib/python3.6/site-packages/fastparquet/__init__.py", line 15, in <module>
        from .core import read_thrift
      File "/home/username/anaconda3/lib/python3.6/site-packages/fastparquet/core.py", line 11, in <module>
        from .compression import decompress_data
      File "/home/username/anaconda3/lib/python3.6/site-packages/fastparquet/compression.py", line 43, in <module>
        compressions['SNAPPY'] = snappy.compress
    AttributeError: module 'snappy' has no attribute 'compress'

Как мне это исправить?


person stormfield    schedule 01.06.2017    source источник


Ответы (1)


К сожалению, в мире питонов есть несколько вещей, которые называются «мгновенными». Я считаю, что вы ошиблись, и в этом случае одна из следующих команд conda должна решить эту проблему:

conda install python-snappy

or

conda install python-snappy -c conda-forge

где последний является немного более новым (выпускает GIL, который может быть важен в многопоточных приложениях).

person mdurant    schedule 01.06.2017
comment
В соответствии с вашей рекомендацией я установил его с помощью следующей команды conda install -c conda-forge python-snappy=0.5.1 Но он все равно получает ту же ошибку, когда я пытаюсь импортировать fastparquet @mdurant - person stormfield; 02.06.2017
comment
мне нужно будет удалить существующий пакет 'snappy' и снова установить fastparaquet? Из исходного кода fastparquet кажется, что импортируется мгновенный сам напрямую. - person stormfield; 02.06.2017
comment
Устал убирать snappy с помощью conda remove snappy. Он удалил python-snappy: 0.5.1-py36_0 conda-forge и snappy: 1.1.4-1 conda-forge. После этого я попытался установить python snappy conda install -c conda-forge python-snappy=0.5.1, который установил те же два пакета. Но все же я получаю ту же ошибку при импорте fastparquet @mdurant - person stormfield; 02.06.2017
comment
Ты умеешь import snappy; print(snappy.__file__)? Это покажет вам, откуда вы импортируете, что, как я предполагаю, является какой-то другой мгновенной функцией, которую вы, вероятно, можете удалить. - person mdurant; 02.06.2017
comment
это говорит >>> print(snappy.__file__) /home/my_username/anaconda3/lib/python3.6/site-packages/snappy/__init__.py @mdurant - person stormfield; 02.06.2017
comment
ок, выяснил проблему. Ваше руководство привело меня на верный путь. Кто-то установил snapPy, используя PIP вместо conda, и это создавало полная неразбериха. Я удалил его, используя удаление PIP. Теперь я могу импортировать fastparquet без ошибок. Спасибо :) - person stormfield; 02.06.2017
comment
Абсолютно нормально. Но у меня есть один вопрос. Поддерживает ли fastparquet в настоящее время обнаружение разделов при чтении из s3? Например: как в Spark - spark.apache.org/ docs / latest / - person stormfield; 14.07.2017
comment
@stormfield: да, и чтение, и запись - они будут соответствовать категориям pandas. У вас будет гораздо лучшая производительность для чтения таких наборов данных, если у вас есть файл _metadata в верхнем каталоге, вместо того, чтобы сначала сканировать все файлы. fastparquet.readthedocs.io/en/latest/; ; fastparquet.readthedocs.io/en/latest/filesystems.html - person mdurant; 14.07.2017
comment
_metafile для меня сейчас не вариант, поскольку данные предоставляются другой системой. Но на основе этой ссылки я попытался прочитать фрейм данных с s3 с помощью s3fs. Мои данные имеют следующий формат: root_dir_in_s3/myset.parquet/unique_id=500/date=2017-03-16/part.0.parquet root_dir_in_s3/myset.parquet/unique_id=600/date=2017-02-16/part.0.parquet - person stormfield; 17.07.2017
comment
Когда я попробовал следующий код, возникли ошибки токена: >>> fp_obj = fp.ParquetFile(list_parquet_files,open_with=myopen) ссылка на ошибку, затем я попытался удалить дефисы с дат и это сработало, когда я создал фреймворк pandas. Но я все еще не получаю столбец уникальный идентификатор в финальном файле pandas DF. Есть ли способ сохранить дефисы в датах и ​​получить недостающий столбец в окончательном df? @mdurant - person stormfield; 17.07.2017
comment
Не могли бы вы попробовать последнюю основную версию? Я считаю, что это то, что мы исправили с момента последнего выпуска. - person mdurant; 17.07.2017
comment
Я удаляю старую версию и пробовал использовать последнюю из conda forge. Оно работало завораживающе! Большое спасибо. Вы только что избавили меня от множества неприятностей !! - person stormfield; 17.07.2017
comment
Приятно помочь - person mdurant; 17.07.2017
comment
Я думаю, что fastparquet не может получить уникальный идентификатор, когда у нас есть только один раздел для него, т.е. скажем, у меня было только одно значение для уникального идентификатора в списке файлов root_dir_in_s3/myset.parquet/unique_id=500/date=2017-03-16/p‌​art.0.parquet root_dir_in_s3/myset.parquet/unique_id=500/date=2017-03-25/p‌​art.1.parquet - person stormfield; 19.07.2017
comment
Вы правы - fastparquet будет считать, что базовым каталогом является root_dir_in_s3/myset.parquet/unique_id=500/, и не будет анализировать родительский путь. На мой взгляд, это разумно, если в myset.parquet нет _metadata. - person mdurant; 19.07.2017
comment
Можете ли вы предложить решение этой же проблемы при отсутствии файла _metadata? Я видел, как искра справляется с этим сценарием довольно хорошо, без проблем, есть ли способ создать отчет об ошибке и решить эту проблему? небольшое исправление структура каталогов похожа на root_dir_in_s3/my_table/unique_id=500/date=2017-03-16/p‌​‌​art.0.parquet root_dir_in_s3/my_table/unique_id=500/date=2017-03-25/p‌​‌​art.1.parquet - person stormfield; 19.07.2017
comment
По вопросам: github.com/dask/fastparquet/issues; и это хорошая идея, хотя я являюсь основным разработчиком, который может решить эту проблему :) Я думаю, что для этого потребуется дополнительный root_path к ParquetFile. - person mdurant; 19.07.2017
comment
Да, я вроде как догадался :). Я поднял вопрос ПРОБЛЕМА № 182 для того же. - person stormfield; 19.07.2017