You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在服务端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

火山引擎 最新活动