如何在javascript中创建ORC(或拼花)文件?

如何在javascript中创建ORC(或拼花)文件?,javascript,pyarrow,apache-arrow,Javascript,Pyarrow,Apache Arrow,在服务器端javascript模块中,我需要将数据写入ORC文件,但找不到任何关于如何做到这一点的线索。理想情况下,我的模块也应该能够交替写入拼花地板文件。对于ORC的情况,我还对如何在python中实现这一点感兴趣 对于拼花地板的情况,我已经看到在python中使用。声明同时支持ORC和拼花文件格式。也有一个,但在他们的我找不到任何关于兽人或拼花地板 在这里,我找到了对和节点模块的引用,但没有找到对ORC的引用。另外,如果可能的话,我更喜欢使用apachearrow 有人给我指点什么吗?更新:

在服务器端javascript模块中,我需要将数据写入ORC文件,但找不到任何关于如何做到这一点的线索。理想情况下,我的模块也应该能够交替写入拼花地板文件。对于ORC的情况,我还对如何在python中实现这一点感兴趣

对于拼花地板的情况,我已经看到在python中使用。声明同时支持ORC和拼花文件格式。也有一个,但在他们的我找不到任何关于兽人或拼花地板

在这里,我找到了对和节点模块的引用,但没有找到对ORC的引用。另外,如果可能的话,我更喜欢使用apachearrow


有人给我指点什么吗?

更新:

你的问题促使我拼凑了一个待办事项箭头->拼花。不幸的是,parquetjs有一个面向行的编写器,但是通过编写器传递表行迭代器似乎工作得很好:

$ node index.js 
{ int: 0, str: 'foo' }
{ int: 1, str: 'bar' }
{ int: 2, str: 'baz' }
原始答案:

我们不支持在ArrowJS中阅读或书写拼花地板。我不知道节点拼花实现的成熟度,所以我还没有探讨ArrowJS和ParquetJS之间可能存在何种互操作

到目前为止,我解决这个问题的方法是在必要时使用pyarrow来编写拼花地板文件,通常是在需要读取或写入长期存储的边界处。我意识到这只是一个解决方案,前提是您能够同时支持一些python服务

如果不是(而且这是一个相对不频繁的操作,或者您可以在python解释器启动时等待),您可以通过从节点生成python子进程并通过pyarrow将表管道化来享受动态语言带来的快速而肮脏的乐趣:

const duplexer=require('duplexer'))
const{finished:eos}=require('stream')
const{spawn}=require('child_process')
const{RecordBatchWriter}=require('apache-arrow')
const writer=new RecordBatchWriter()
writell.writeAll(您的箭头\表()).close()
等待eos(writer.pipe(到拼花文件('out/file.parquet'))
函数spawn_python_脚本(代码){
const child=spawn('python',['-c',code]);
返回双工器(child.stdin,child.stdout);
}
用于拼花文件的函数(输出路径){
返回生成python脚本(`
导入系统
将pyarrow作为pa导入
导入pyarrow.parquet作为pq
#从stdin中读取所有批次
table=pa.RecordBatchStreamReader(sys.stdin.buffer).read_all()
#将表写入输出路径
pq.write_表(表“${out_path}”)
sys.stdout.write('将表写入\'${out\u path}\')
sys.stdout.flush()
`)
}
如果将python脚本保存到一个文件中,并从
sys.argv[1]
读取路径,python的启动速度会快一点(但仍需要一两秒钟)

我不熟悉ORC库,但我可以想象,在他们的Python API中有一种拼花ORC转换。我发现,不幸的是,这些工具中的大多数都不存在于JS中,或者如果存在的话,它们都是新生的/废弃的(这就是为什么我们必须编写ArrowJS实现的原因)


遗憾的是,现在node在i/o方面相当不错,通过python实现同样的吞吐量需要大量挖掘最新的/ASGI库。像and这样的框架非常棒,但它是如此前沿,当你遇到麻烦时,很难在网上找到答案[/rant]。

更新:

你的问题促使我拼凑了一个待办事项箭头->拼花。不幸的是,parquetjs有一个面向行的编写器,但是通过编写器传递表行迭代器似乎工作得很好:

$ node index.js 
{ int: 0, str: 'foo' }
{ int: 1, str: 'bar' }
{ int: 2, str: 'baz' }
原始答案:

我们不支持在ArrowJS中阅读或书写拼花地板。我不知道节点拼花实现的成熟度,所以我还没有探讨ArrowJS和ParquetJS之间可能存在何种互操作

到目前为止,我解决这个问题的方法是在必要时使用pyarrow来编写拼花地板文件,通常是在需要读取或写入长期存储的边界处。我意识到这只是一个解决方案,前提是您能够同时支持一些python服务

如果不是(而且这是一个相对不频繁的操作,或者您可以在python解释器启动时等待),您可以通过从节点生成python子进程并通过pyarrow将表管道化来享受动态语言带来的快速而肮脏的乐趣:

const duplexer=require('duplexer'))
const{finished:eos}=require('stream')
const{spawn}=require('child_process')
const{RecordBatchWriter}=require('apache-arrow')
const writer=new RecordBatchWriter()
writell.writeAll(您的箭头\表()).close()
等待eos(writer.pipe(到拼花文件('out/file.parquet'))
函数spawn_python_脚本(代码){
const child=spawn('python',['-c',code]);
返回双工器(child.stdin,child.stdout);
}
用于拼花文件的函数(输出路径){
返回生成python脚本(`
导入系统
将pyarrow作为pa导入
导入pyarrow.parquet作为pq
#从stdin中读取所有批次
table=pa.RecordBatchStreamReader(sys.stdin.buffer).read_all()
#将表写入输出路径
pq.write_表(表“${out_path}”)
sys.stdout.write('将表写入\'${out\u path}\')
sys.stdout.flush()
`)
}
如果将python脚本保存到一个文件中,并从
sys.argv[1]
读取路径,python的启动速度会快一点(但仍需要一两秒钟)

我不熟悉ORC库,但我可以想象,在他们的Python API中有一种拼花ORC转换。我发现,不幸的是,这些工具中的大多数都不存在于JS中,或者如果存在的话,它们都是新生的/废弃的(这就是为什么我们必须编写ArrowJS实现的原因)

遗憾的是,现在node在i/o方面相当不错,通过python实现同样的吞吐量需要大量挖掘最新的/ASGI库。像和这样的框架非常棒,但它是如此的前沿