使用 pyarrow 的 Python 错误 - ArrowNotImplementedError:未构建对编解码器“snappy”的支持

问题描述

使用 Python、Parquet 和 Spark 并在升级ArrowNotImplementedError: Support for codec 'snappy' not built 后运行到 pyarrow=3.0.0。我以前没有这个错误的版本是 pyarrow=0.17错误不会出现在pyarrow=1.0.1中,而确实出现在pyarrow=2.0.0中。这个想法是使用 Snappy 压缩将 Pandas DataFrame 编写为 Parquet 数据集(在 Windows 上),然后使用 Spark 处理 Parquet 数据集。

import numpy as np
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

df = pd.DataFrame({
    'x': [0,1,1],'a': np.random.random(6),'b': np.random.random(6)})
table = pa.Table.from_pandas(df,preserve_index=False)
pq.write_to_dataset(table,root_path=r'c:/data',partition_cols=['x'],flavor='spark')

enter image description here

解决方法

您安装的 pyarrow 软件包不是来自 conda-forge,它似乎与 PYPI 上的软件包不匹配。我做了更多的研究,pypi_0 只是表示该软件包是通过 pip 安装的。这并不意味着它实际上来自 PYPI。

我不确定这是怎么发生的。您可以检查您的 conda 日志 (envs/YOUR-ENV/conda-meta/history) 但是,鉴于这是从 conda 外部安装的,我不确定其中是否会有任何有意义的信息。也许您在版本升级到 3 之后和上传轮子之前尝试安装 Arrow,因此您的系统退回到从源代码构建?

,

conda install pyarrow 方法有问题。我用 conda remove pyarrow 删除它,然后用 pip install pyarrow 安装它。这最终奏效了。

,

我遇到了完全相同的问题。重新安装了 Anaconda 3.8。然后从这个链接“https://anaconda.org/conda-forge/pyarrow”做了conda install -c conda-forge pyarrow。它通过此安装窒息,但因冻结/灵活解决而失败,并且 conda 不断尝试不同的变体,直到最终安装为止。然后,您可以导入 pyarrow。但是,当您尝试打开 Parquet 文件时,您会收到“snappy”编解码器错误 - 此线程的主题。

然后我做了 conda remove pyarrow,所以我回到了全新安装。然后pip install pyarrow,我可以成功加载镶木地板文件。

,

我不是 100%,但这可能是因为从 1.0.0 版开始,他们精简了默认的箭头构建并且 snappy 成为了一个可选组件,see

我认为您必须使用 -DARROW_WITH_SNAPPY=ONsee 重建箭头。但这对于开始工作来说可能非常困难和乏味。

另一种选择是禁用 snappy:

pq.write_to_dataset(table,root_path=r'c:/data',partition_cols=['x'],flavor='spark',compression="NONE")

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...