You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS Lambda中使用@dsnp/parquetjs读取Parquet文件失败求助

问题描述

在AWS Lambda中使用@dsnp/parquetjs读取Parquet文件时,抛出以下错误:

2023-09-21T05:49:13.435Z    undefined   ERROR   Uncaught Exception  
{
    "errorType": "Error",
    "errorMessage": "ENOENT: no such file or directory, open '/var/task/wasm_brotli_nodejs_bg.wasm'",
    "code": "ENOENT",
    "errno": -2,
    "syscall": "open",
    "path": "/var/task/wasm_brotli_nodejs_bg.wasm",
    "stack": [
        "Error: ENOENT: no such file or directory, open '/var/task/wasm_brotli_nodejs_bg.wasm'",
        "    at Object.openSync (node:fs:590:3)",
        "    at Object.readFileSync (node:fs:458:35)",
        "    at node_modules/wasm-brotli/wasm_brotli_nodejs_bg.js (/var/task/index.js:18200:31)",
        "    at __require (/var/task/index.js:10:50)",
        "    at node_modules/wasm-brotli/wasm_brotli_nodejs.js (/var/task/index.js:18292:12)",
        "    at __require (/var/task/index.js:10:50)",
        "    at node_modules/@dsnp/parquetjs/dist/lib/compression.js (/var/task/index.js:18307:25)",
        "    at __require (/var/task/index.js:10:50)",
        "    at node_modules/@dsnp/parquetjs/dist/lib/schema.js (/var/task/index.js:18635:44)",
        "    at __require (/var/task/index.js:10:50)"
    ]
}

读取文件的代码如下:

const file = fs.readFileSync(localFilePath);
console.log('file:', file);
const reader = await parquet.ParquetReader.openBuffer(file);

已确认Parquet文件存在于Lambda的/tmp/目录,但未在代码中直接引用brotli,请问错误原因是什么?

原因分析与解决方案

原因

@dsnp/parquetjs内部依赖wasm-brotli库处理Parquet文件的brotli压缩格式,该依赖会尝试从/var/task/目录加载对应的WASM文件。但当你用打包工具(如Webpack、ESBuild)将代码打包成单文件部署到Lambda时,WASM文件可能未被正确包含到部署包中,或者打包后的代码硬编码了错误的WASM文件路径,导致Lambda运行时找不到该文件。

解决方案

  • 检查部署包内容:确保wasm_brotli_nodejs_bg.wasm文件存在于部署包根目录(对应Lambda的/var/task/)。npm安装依赖后,该文件通常在node_modules/wasm-brotli/目录下,打包时需手动复制到部署包根目录。
  • 调整打包配置:
    若使用Webpack,需添加规则处理WASM文件,确保输出到正确路径:
    module.exports = {
      module: {
        rules: [
          {
            test: /\.wasm$/,
            type: 'asset/resource',
            generator: {
              filename: '[name][ext]'
            }
          }
        ]
      }
    };
    
    若使用Serverless Framework或SAM,可在配置文件中添加文件复制规则,将WASM文件纳入部署包。
  • 替换依赖库:如果配置麻烦,可改用parquetjs-lite——这是@dsnp/parquetjs的轻量版本,移除了WASM依赖,更适配Lambda环境。

内容的提问来源于stack exchange,提问作者MG123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:52:55