如何使用Node.JS创建Parquet文件并保存到Minio

3
从NPM文档中的以下示例 (https://www.npmjs.com/package/parquets),我该如何将生成的parquet文件直接写入minio,避免先将parquet文件写入磁盘,再执行第二个操作将文件移动到minio。
下面的示例在调用close()时立即将文件写入磁盘。
// advanced fruits table
let schema = new ParquetSchema({
  name: { type: 'UTF8' },
  colours: { type: 'UTF8', repeated: true },
  stock: {
    repeated: true,
    fields: {
      price: { type: 'DOUBLE' },
      quantity: { type: 'INT64' },
    }
  }
});

// the above schema allows us to store the following rows:
let writer = await ParquetWriter.openFile(schema, 'fruits.parquet');

await writer.appendRow({
  name: 'banana',
  colours: ['yellow'],
  stock: [
    { price: 2.45, quantity: 16 },
    { price: 2.60, quantity: 420 }
  ]
});

await writer.appendRow({
  name: 'apple',
  colours: ['red', 'green'],
  stock: [
    { price: 1.20, quantity: 42 },
    { price: 1.30, quantity: 230 }
  ]
});

await writer.close();

您正在尝试在内存中创建Parquet格式,然后将其写入S3吗?使用DuckDB,有直接将数据写入S3兼容对象存储的选项,而无需在磁盘上创建文件- https://dev59.com/mXkPtIcB2Jgan1znr_D7#74207838。使用Parquets库,您可以将文件流式传输到内存中,但是将其写入Minio可能不可行。 - ns15
1个回答

1
使用/tmp来写入你的parquet文件,然后使用minio的sdk上传该文件。 为了确保可以良好缩放,请在存储在临时文件夹中的文件名中包含一个随机字符串或UUID。 不幸的是,我没有在库中找到任何流选项,所以除非有人知道如何从该库返回流对象,否则您不能完全实现您想要的功能。

很抱歉回复你这么晚,而且我不确定SDK是否已经更新了,但是如果没有流媒体选项,它会限制您可以处理的文件大小。 - PrestonDocks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接