You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS apache-arrow的tableFromIPC支持的压缩方式及读取报错咨询

问题描述

我通过本地、谷歌云存储或S3等文件系统,在Web前端(JS)与后端(Python)之间交换Arrow IPC格式数据。

后端Python写入代码如下:

with self.file_system.open_output_stream(f'{self.bucket}/{file_name}') as sink:
    with ipc.new_file(sink, schema=table.schema, options=ipc.IpcWriteOptions(compression='lz4')) as writer:
        writer.write(table)
    sink.flush()

前端使用apache-arrow包的tableFromIPC读取时,无法识别LZ4或ZSTD压缩的文件,前端代码:

import { readFileSync } from 'fs';
import { tableFromIPC } from 'apache-arrow';

const arrow = readFileSync('xx.arrow');
const table = tableFromIPC(arrow);

console.table(table.toArray());

运行后报错:

Uncaught (in promise) Error: Record batch compression not implemented

我在JS包文档中未找到默认读取格式或自定义配置选项的相关说明,请问该如何解决?

解决方案

方案1:后端禁用压缩(最简单直接)

修改Python代码,移除压缩配置,生成无压缩的Arrow IPC文件,前端即可正常读取:

with self.file_system.open_output_stream(f'{self.bucket}/{file_name}') as sink:
    # 去掉compression参数,或显式设置为None
    with ipc.new_file(sink, schema=table.schema, options=ipc.IpcWriteOptions(compression=None)) as writer:
        writer.write(table)
    sink.flush()

方案2:前端添加压缩解码器支持

JS版apache-arrow默认未内置LZ4/ZSTD的解码器,需要手动引入对应压缩库并注册:

以LZ4为例:

  1. 安装LZ4依赖:
npm install lz4js
  1. 修改前端代码,注册解码器后再读取文件:
import { readFileSync } from 'fs';
import { tableFromIPC, registerCompression } from 'apache-arrow';
import { decompress } from 'lz4js';

// 注册LZ4解码器
registerCompression('lz4', {
  decompress: (buffer) => decompress(new Uint8Array(buffer))
});

const arrow = readFileSync('xx.arrow');
const table = tableFromIPC(arrow);

console.table(table.toArray());

若使用ZSTD:

安装zstd-js依赖后,同理注册ZSTD解码器:

npm install zstd-js
import { decompress } from 'zstd-js';
registerCompression('zstd', {
  decompress: (buffer) => decompress(new Uint8Array(buffer))
});

方案3:中间层转码(兼容现有后端输出)

如果无法修改后端代码,也不想调整前端依赖,可以在后端或新增中间服务,将压缩的Arrow文件转换为无压缩格式后再提供给前端;或者前端下载文件后,先手动调用压缩库解压,再将解压后的二进制数据传给tableFromIPC。

内容的提问来源于stack exchange,提问作者Yan Yang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:15:36