目前我正在尝试在 Docker 容器中的 R 中生成 zstd 压缩的 Apache Parquet 文件。
即使我安装了所有依赖项并且 arrow 本身工作正常,它也找不到 zstd(或 brotli)压缩。这是我的 Dockerfile 的 MWE 版本:
FROM r-base
RUN apt-get update
RUN apt-get -y install --no-install-recommends \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
libgit2-dev \
libgsl0-dev \
libfontconfig1-dev \
libharfbuzz-dev \
libfribidi-dev \
libpng-dev \
libtiff5-dev \
git \
curl \
build-essential \
libboost-system-dev \
libboost-thread-dev \
libboost-program-options-dev \
libboost-test-dev \
libboost-filesystem-dev \
libsnappy-dev \
libthrift-dev \
libutf8proc-dev \
rapidjson-dev \
libxsimd-dev \
liblz4-dev \
libre2-dev \
cmake \
zstd \
brotli
ARG ARROW_R_DEV=true
RUN R -e 'install.packages(Ncpus = 64, pkgs = c("arrow"))'
当我启动容器并测试可用性时,我看到:
> arrow::codec_is_available("snappy")
[1] TRUE
> arrow::codec_is_available("zstd")
[1] FALSE
> arrow::codec_is_available("brotli")
[1] FALSE
这表明
arrow
本身工作正常(我也测试过),但找不到 zstd
或 brotli
。
如何在 Docker 容器中用 R 编写
zstd
压缩的 Parquet 文件?
libzstd-dev \
libbrotli-dev
而不是
zstd \
brotli
...箭头安装可以选择它。如果您更新您的问题以包含完整的构建输出,我们也许可以提供更多帮助!例如,令我惊讶的是 arrow 包安装没有下载我们预先构建的静态库(据我所知,其中包括 zstd 和 brotli)。
文档,发现它不仅涉及正在安装的系统软件包,还涉及如何构建箭头本身。将 NOT_CRAN=true
环境变量集(除其他外)
LIBARROW_MINIMAL
添加到
false
,从而构建具有
zstd
brotli
支持的箭头。这个 MWE Dockerfile 对我有用
FROM r-base
RUN apt-get update
RUN apt-get -y install --no-install-recommends \
libcurl4-openssl-dev \
libssl-dev \
libxml2-dev \
libgit2-dev \
libgsl0-dev \
libfontconfig1-dev \
libharfbuzz-dev \
libfribidi-dev \
libpng-dev \
libtiff5-dev \
git \
curl \
build-essential \
libboost-system-dev \
libboost-thread-dev \
libboost-program-options-dev \
libboost-test-dev \
libboost-filesystem-dev \
libsnappy-dev \
libthrift-dev \
libutf8proc-dev \
rapidjson-dev \
libxsimd-dev \
liblz4-dev \
libre2-dev \
cmake \
zstd \
brotli
ARG ARROW_R_DEV=true
ARG NOT_CRAN=true
RUN R -e 'install.packages(Ncpus = 64, pkgs = c("arrow"))'