【发布时间】:2019-12-23 09:18:49
【问题描述】:
我是 AWS Lambda 的新手,我想在 Lambda 上运行机器学习 API 的代码。总之,我想在 Lambda 上运行的函数是一个读取一些 csv 文件以创建一个 pandas 数据帧并在其中搜索,另一个通过来自 Flask 应用程序的请求运行一些腌制的机器学习模型。为此,我需要导入与 Amazon Linux 兼容的 pandas、joblib 和可能的 scikit-learn。我使用的是 Windows 机器。
一般来说,我会采用通过上传 zip 文件来使用 Lambda 层的方法。当然,由于 Lambda 有一个带有 SciPy 和 Numpy 的预构建层,所以我不会导入它们。如果我导入它们,无论如何我都会超过 Lambda 的层限制。 更具体地说,我做了以下工作:
- 下载并提取了上面列出的库的 linux 兼容版本。例如:我从这个link 下载了“pandas-0.25.0-cp35-cp35m-manylinux1_x86_64.whl”并解压到一个文件夹中。
-
解压后的库位于以下目录:
lambda_layers\python\lib\python3.7\site-packages
它们被压缩成一个文件并上传到 S3 Bucket 以创建层。
我导入了包:
import json
import boto3
import pandas as pd
我从 Lambda 收到以下错误:
{ "errorMessage": "Unable to import module 'lambda_function': C extension: No module named 'pandas._libs.tslibs.conversion' not built. 如果要从源目录导入 pandas,可能需要运行'python setup .py build_ext --inplace --force' 先构建 C 扩展。", “errorType”:“Runtime.ImportModuleError” }
【问题讨论】:
-
你能试试这个吗:github.com/keithrozario/Klayers,有一个我没有测试过的 pandas 层是公开的。 arn:aws:lambda:
:113088814899:layer:Klayers-python37-pandas:
标签: python-3.x pandas aws-lambda