Javascript-从AWS s3 bucket读取拼花数据(使用snappy压缩)
在nodeJS中,我试图读取拼花地板文件(compression='snappy'),但没有成功 我使用npm模块打开本地文件并读取它,但reader.cursor()抛出了一个神秘的错误“尚未实现”。无论使用哪种压缩(普通、rle或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
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()){
控制台日志(记录);
}
您找到解决方案了吗?