Python error using pyarrow - ArrowNotImplementedError: Support for codec 'snappy' not built

Python error using pyarrow - ArrowNotImplementedError: Support for codec 'snappy' not built

升级到 pyarrow=3.0.0 后,使用 Python、Parquet、Spark 和 运行 进入 ArrowNotImplementedError: Support for codec 'snappy' not built。我以前没有这个错误的版本是 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, 0, 0, 1, 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')

我不是 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")

您安装的 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。然后从这个 link “https://anaconda.org/conda-forge/pyarrow” 中做了 conda install -c conda-forge pyarrow。它通过此安装阻塞但失败 frozen/flexible 解决并且 conda 不断尝试不同的变体,直到最终安装。然后你可以导入 pyarrow。但是,当您尝试打开镶木地板文件时,您会收到 'snappy' 编解码器错误 - 本主题的主题。

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

我通过在 Conda 提示符下执行 pip install pyArrow 来让它工作。