JavaScript-从AWS S3存储桶中读取镶木地板数据(快速压缩)

Javascript - Read parquet data (with snappy compression) from AWS s3 bucket(JavaScript-从AWS S3存储桶中读取镶木地板数据(快速压缩))
本文介绍了JavaScript-从AWS S3存储桶中读取镶木地板数据(快速压缩)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

NodeJS中,我正在尝试读取拼图文件(comage=‘Snappy’),但失败。

我使用https://github.com/ironSource/parquetjsNPM模块打开并读取本地文件,但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.parket在python中生成了我的拼图文件 2.我在写文件时使用了‘Snappy’压缩 3.我可以用PYTHON阅读这些文件,没有任何问题 4.我的模式不是每次写拼花时都是固定的(未知的)。我不会在写作时创建图式。 5.错误。堆栈在控制台中打印未定义的 6.console.log(‘-ailure’,error);打印"尚未实现"

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

如有任何帮助、建议、代码示例,我们将不胜感激。

推荐答案

这里有一个https://github.com/ironSource/parquetjs分叉:https://github.com/ZJONSSON/parquetjs,它是ironSource项目的一个&q;lite&q;版本。您可以使用npm install parquetjs-lite安装它。

ZJONSSON项目附带一个函数ParquetReader.openS3,该函数接受S3客户端(来自AWS SDK版本2)和参数({Bucket: 'x', Key: 'y'})。您可能需要尝试一下,看看这是否适用于您。

如果您使用的是AWS SDK/S3客户端的版本3,我这里有一个兼容的分支:https://github.com/entitycs/parquetjs(请参阅标签功能/OpenS3v3)。

项目自述文件中的用法示例:

const parquet = require("parquetjs-lite");

const params = {
  Bucket: 'xxxxxxxxxxx',
  Key: 'xxxxxxxxxxx'
};
// v2 example
const AWS = require('aws-sdk');
const client = new AWS.S3({
  accessKeyId: 'xxxxxxxxxxx',
  secretAccessKey: 'xxxxxxxxxxx'
});
let reader = await parquet.ParquetReader.openS3(client,params);

//v3 example
const {S3Client, HeadObjectCommand, GetObjectCommand} = require('@aws-sdk/client-s3');
const client = new S3Client({region:"us-east-1"});
let reader = await parquet.ParquetReader.openS3(
  {S3Client:client, HeadObjectCommand, GetObjectCommand},
  params
);

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

// read all records from the file and print them
let record = null;
while (record = await cursor.next()) {
  console.log(record);
}

这篇关于JavaScript-从AWS S3存储桶中读取镶木地板数据(快速压缩)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

js文件上传前的预览和删除实例代码,具体如下: !DOCTYPE htmlhtml lang="en" head meta charset="UTF-8" / meta http-equiv="X-UA-Compatible" content="IE=edge" / meta name="viewport" content="width=device-width, initial-scale=1.0" / title文件上传预览和删除/title style #img-box{display: flex;
一、下拉选择 改动三个地方:下拉选择模板、数据渲染、下拉选择监听填充数据 //表格{ title: '是否棚改房span class="titletips"*/span', field: 'sfpgf', align: 'center', width: 110, // edit: 'text', templet: function (d) { return 'select name="sfpgf" class="sel_xlk" lay-filter="sfpgf" l
Js正则表达式过滤特殊字符、表情的实例代码: let ret = "12312ffds#¥@¥#%^***(()))*)).`@%@¥@¥", val = this.customDeviceName;//特殊字符过滤let pattern = new RegExp("[`~!@#$^*()=|{}':;',\\[\\]./?~!@#¥……*()——|{}【】‘;:”“'。,、?]");for (let i = 0; i val.length;
本文给大家介绍Javascript js中实现和PHP一样的时间戳格式化函数的方法,具有一定的参考借鉴价值,需要的朋友可以参考下,我们知道在php中有一个date()函数,可以方便的把时间戳格式化为时间字符串。可是在js中,我们要想实现这种效果,要写好
js过滤所有特殊字符的实例代码 var pattern=/[`~!@#$^\-*()=|{}':;',\\\[\]\.\/?~!@#¥……*()——|{}【】';:""'。,、?\s]/g; //string = string.replace(pattern,""); var Str = '替换?字*符串/中的所\有特"殊:字符(包含空|格' var out = Str.replace(pattern,""); alert(out)
需求是模板字符串中不允许出现script 标签、不允许有javascript: 和 .js 文件引用,主要方法如下: clearScriptTag (str) { const reg = /script[^]*([\S\s]*?)\/script/gim; // 清除标签内 相关 xss 安全代码 const reg1 = /javascript:/gim; const reg2 = / *.js/gim; if (reg.test(str)) { str