如何在服务端JavaScript及Python中生成ORC、Parquet文件?
解决方案:Node.js与Python中ORC/Parquet文件生成指南
Node.js 端实现方案
首先得明确:目前Apache Arrow的Node.js模块确实还不支持ORC格式的读写,这也是你查阅文档没找到相关API的原因,社区目前还在推进这部分功能的开发,你可以持续关注项目的更新进度。
针对你的需求,分两种格式来说:
Parquet 文件写入
如果是写Parquet,你有两个靠谱的选择:
- Apache Arrow Node.js 模块:虽然不支持ORC,但它对Parquet的支持是完善的。你可以先把数据转换成Arrow的Table结构,再写入Parquet文件。示例代码如下:
const { tableFromArrays, writeParquet } = require('apache-arrow'); const fs = require('fs/promises'); // 构造示例数据 const data = { id: [1, 2, 3], name: ['Alice', 'Bob', 'Charlie'], age: [25, 30, 35] }; // 转换为Arrow Table const table = tableFromArrays(data); // 写入Parquet文件 (async () => { const parquetBuffer = await writeParquet(table); await fs.writeFile('data.parquet', parquetBuffer); })(); - parquetjs/node-parquet:这两个第三方库你已经在Stack Overflow上了解到了,它们是专门针对Node.js的Parquet处理工具,如果你不想依赖Arrow,也可以用它们来实现,API相对更轻量化。
ORC 文件写入
很遗憾,目前Node.js生态里还没有基于Apache Arrow的ORC实现,也没有成熟的第三方ORC处理模块。如果你的业务必须在Node.js端生成ORC,有两个临时的折中方案:
- 通过子进程调用Python脚本:利用Python的ORC生成能力,在Node.js里通过
child_process模块调用Python脚本完成ORC写入,这种方式可以复用你Python端的逻辑。 - 等待Apache Arrow Node.js模块的更新:目前Arrow的C++核心已经支持ORC,Node.js绑定的支持只是时间问题,可以关注项目的Roadmap或者GitHub Issues。
Python 端实现方案
Python中用Apache Arrow的pyarrow库来生成ORC是完全可行的,而且步骤很清晰,和Parquet的写法非常相似:
安装依赖
首先确保你安装了pyarrow(需要ORC支持的话,pyarrow版本需≥0.15.0):
pip install pyarrow
生成ORC文件示例
import pyarrow as pa import pyarrow.orc as orc # 构造示例数据 data = { 'id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35] } # 转换为Arrow Table table = pa.table(data) # 写入ORC文件 orc.write_table(table, 'data.orc')
生成Parquet文件(补充)
如果你需要切换写Parquet,用pyarrow同样简单,只需要替换成parquet的写入方法:
import pyarrow.parquet as pq pq.write_table(table, 'data.parquet')
这样你就可以在Python中轻松实现ORC和Parquet的切换写入,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Kai Roesner




