AWS Lambda层无法导入模块'lambda_function':找不到模块命名为'pyarrow.lib'。

3

我按照以下步骤创建了一个层(layer)供我的 AWS Lambda 函数使用。

  1. 使用以下命令将 pyarrow 库下载到 python 文件夹中:

    pip install pyarrow==5.0.0 -t python

  2. 然后递归压缩 python 文件夹:

    zip -r pyarrow.zip python/

  3. 通过 AWS Lambda UI 上传压缩文件并成功创建了一个层(layer)。

  4. 将该层(layer)添加到我的 Lambda 函数中。

然而,当我尝试导入 pyarrow 时,却遇到了以下错误。

[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'pyarrow.lib'

我下载了zip文件,其中可以看到pyarrow文件夹。但Lambda无法找到pyarrow。您有什么建议或意见,可能是哪里出了错呢?


1
请仔细检查您是否遵循了打包说明 - jarmod
3个回答

1
假设您的代码在某个路径下的“function_code”文件夹中
  1. 使用以下命令安装pyarrow==5.0.0并将其放置在“function_code/”文件夹中:pip install pyarrow==5.0.0 -t function_code/
  2. 切换到“function_code”文件夹:cd function_code
  3. 压缩“function_code”文件夹中的所有内容(不要压缩整个文件夹):zip -r funcition_code.zip *
  4. 上传压缩包

0

当我想在AWS Lambda上创建parquet文件时,使用pyarrow作为可选依赖项时,我遇到了类似的问题。

我创建了一个pyarrow层,当我从AWS控制台下载该层时,结构如下:enter image description here

我有其他使用相同结构的层,它们都正常工作。但是对于pyarrow,我会收到以下错误:

"errorMessage": "无法找到可用的引擎;尝试使用:'pyarrow','fastparquet'。\n需要适当版本的pyarrow或fastparquet支持parquet。\n尝试导入以上内容会导致以下错误:\n- 缺少可选依赖项'pyarrow'。需要pyarrow支持parquet。使用pip或conda安装pyarrow。\n- 缺少可选依赖项'fastparquet'。需要fastparquet支持parquet。使用pip或conda安装fastparquet。",


0

我曾经遇到过同样的问题,通过阅读这个问题的被接受答案中的Medium文章,我成功地解决了它:numpy error when importing pandas with AWS Lambda

因此,我使用了*manylinux1_x86_64.whl包来代替numpy和pandas的安装。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接