导入Python中的fastparquet时出现了与snappy相关的错误。

8
我已经在我的 EC2 服务器上安装了以下模块,该服务器已经安装了 Python (3.6) 和 Anaconda:
  • snappy
  • pyarrow
  • s3fs
  • fastparquet
除了 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'

我该如何解决这个问题?
1个回答

12

很不幸,在Python世界中有多个被称为“snappy”的东西。我认为你可能选择了错误的版本,如果是这种情况,下面任何一个conda命令都可以解决问题:

conda install python-snappy
或者
conda install python-snappy -c conda-forge

其中后者稍微更新一些(释放全局锁,在多线程应用程序中可能很重要)。


你能执行 import snappy; print(snappy.__file__) 吗?这将会显示你正在从哪里导入,我假设这是另一个“snappy”,可以将其删除。 - mdurant
print(snappy.file) /home/my_username/anaconda3/lib/python3.6/site-packages/snappy/init.py
- stormfield
@stormfield:是的,它可以进行读写操作 - 它们将对应于pandas分类数据。如果您在顶级目录中有一个_metadata文件,而不是必须先扫描所有文件,则可以更好地读取此类数据集。http://fastparquet.readthedocs.io/en/latest/details.html#partitions-and-row-groups;;http://fastparquet.readthedocs.io/en/latest/filesystems.html - mdurant
我移除了旧版本并尝试使用来自conda forge的最新版本。它完美地运行了!非常感谢。你刚刚帮我省去了很多麻烦!! - stormfield
你说得对 - fastparquet 将假定基本目录为 root_dir_in_s3/myset.parquet/unique_id=500/,而不分析父路径。在我看来,如果 myset.parquet 中没有 _metadata,这是合理的。 - mdurant
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接