Javascript-从AWS s3 bucket读取拼花数据(使用snappy压缩)

Javascript-从AWS s3 bucket读取拼花数据(使用snappy压缩),javascript,node.js,amazon-s3,parquet,snappy,Javascript,Node.js,Amazon S3,Parquet,Snappy,在nodeJS中,我试图读取拼花地板文件(compression='snappy'),但没有成功 我使用npm模块打开本地文件并读取它,但reader.cursor()抛出了一个神秘的错误“尚未实现”。无论使用哪种压缩(普通、rle或snappy)创建输入文件,它都会抛出相同的错误 这是我的密码: const readParquet = async (fileKey) => { const filePath = 'parquet-test-file.plain'; // 'snapp

在nodeJS中,我试图读取拼花地板文件(compression='snappy'),但没有成功

我使用npm模块打开本地文件并读取它,但reader.cursor()抛出了一个神秘的错误“尚未实现”。无论使用哪种压缩(普通、rle或snappy)创建输入文件,它都会抛出相同的错误

这是我的密码:

const readParquet = async (fileKey) => {

  const filePath = 'parquet-test-file.plain'; // 'snappy';

  console.log('----- reading file : ', filePath);
  let reader = await parquet.ParquetReader.openFile(filePath);
  console.log('---- ParquetReader initialized....');

  // create a new cursor
  let cursor = reader.getCursor();

  // read all records from the file and print them
  if (cursor) {
    console.log('---- cursor initialized....');

    let record = await cursor.next() ; // this line throws exception
    while (record) {
      console.log(record);
      record = await cursor.next();
    }
  }

  await reader.close();
  console.log('----- done with reading parquet file....');

  return;
};
呼吁阅读:

let dt = readParquet(fileKeys.dataFileKey);
dt
  .then((value) => console.log('--------SUCCESS', value))
  .catch((error) => {
    console.log('-------FAILURE ', error); // Random error
    console.log(error.stack);
  })
更多信息: 1.我已经使用pyarrow.parquet在python中生成了我的拼花文件 2.我在编写文件时使用了“SNAPPY”压缩 3.我可以用python阅读这些文件,没有任何问题 4.每次编写拼花文件时,我的模式都不是固定的(未知的)。我在编写时不创建模式。 5.错误。堆栈打印控制台中未定义的 6.console.log('----FAILURE',error);打印“尚未实施”

我想知道是否有人遇到过类似的问题,并有想法/解决方案可供分享。顺便说一句,我的拼花文件存储在AWS S3位置(与此测试代码不同)。我仍然需要找到从S3桶读取拼花文件的解决方案


任何帮助、建议、代码示例都将不胜感激。

使用
var AWS=require('AWS-sdk')从S3获取数据

然后使用
节点parquet
将parquet文件读入变量

import np = require('node-parquet');

// Read from a file:
var reader = new np.ParquetReader(`file.parquet`);
var parquet_info = reader.info();
var parquet_rows = reader.rows();
reader.close();
parquet_rows = parquet_rows + "\n";
这里有一个分支:它是ironSource项目的“lite”版本。您可以使用npm install parquetjs lite安装它

ZJONSSON项目附带了一个函数
ParquetReader.openS3
,它接受一个s3客户端(来自AWS SDK版本2)和参数(
{Bucket:'x',Key:'y'}
)。你可能想试试看这是否适合你

如果您使用的是AWS SDK/S3客户机的版本3,那么这里有一个兼容的fork:(请参阅tag feature/openS3v3)

来自项目README.md的示例用法:

const parquet=require(“parquetjs lite”);
常量参数={
Bucket:'xxxxxxxxxx',
关键字:“XXXXXXXXXX”
};
//v2示例
const AWS=require('AWS-sdk');
const client=new AWS.S3({
accessKeyId:'xxxxxxxxxx',
secretAccessKey:'xxxxxxxxxx'
});
let reader=wait parquet.ParquetReader.openS3(客户端,参数);
//v3示例
const{S3Client,HeadObjectCommand,GetObjectCommand}=require('@aws-sdk/client-s3');
const client=新的S3Client({地区:“us-east-1”});
let reader=Wait parquet.ParquetReader.openS3(
{S3Client:client,HeadObjectCommand,GetObjectCommand},
params
);
//创建一个新光标
让cursor=reader.getCursor();
//从文件中读取所有记录并打印它们
让记录=null;
while(record=wait cursor.next()){
控制台日志(记录);
}

您找到解决方案了吗?