我在nodejs中创建了一个AWS lambda,所以我正在使用一个库将json转换为镶木地板文件。
这个库没有自己的压缩方法,所以创建我的镶木地板文件后,我正在尝试用google snappy库压缩它:
next => {
snappy.compress(fs.readFileSync(parquetFile.name), (err, compressed) => {
next(err, compressed)
})
},
(compressed, next) => {
const parquetS3File = new S3File(config.parquet.bucket, Tools.createPutKey(config.parquet.prefix, s3ObjectKey))
parquetS3File.body = compressed
parquetS3File.upload(err => {
parquetFile.removeCallback()
next(err)
})
}
但是,当我尝试在雅典娜做一些查询时,我有下一个错误
HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://bucket-example/data/parquet_node/year=2018/month=04/day=18/hour=18/minute=47/file.snappy.parquet (offset=0, length=11716266): can not read class parquet.format.FileMetaData: don't know what type: 15
This query ran against the "test" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: 3b3a2df1-b202.
另一方面,当我不压缩数据时,Athena可以读取文件。
类似的东西:
next => {
const parquetS3File = new S3File(config.parquet.bucket, Tools.createPutKey(config.parquet.prefix, s3ObjectKey))
parquetS3File.body = fs.readFileSync(parquetFile.name)
parquetS3File.upload(err => {
parquetFile.removeCallback()
next(err)
})
}
所以,问题是:有没有办法在创建一个镶木地板文件(用snappy)后压缩它?
谢谢!