熊猫和AWS Lambda

Moe*_*Moe 21 pandas aws-lambda

有没有人拥有与AWS Lambda兼容的完全编译的pandas版本?

在搜索了几个小时之后,我似乎无法找到我正在寻找的内容并且关于此主题的文档不存在.

我需要在lambda函数中访问包,但是我没有成功地使包正确编译以便在Lambda函数中使用.

代替编译,任何人都可以提供可重现的步骤来创建二进制文件吗?

不幸的是,我无法成功复制任何关于主题的指南,因为它们大多数将大熊猫与我不需要的scipy结合起来并增加了额外的负担.

blu*_*kin 17

我相信你应该能够使用最近的pandas版本(或者可能是你机器上的版本).你可以像这样自己创建一个带有pandas的lambda包,

  1. 首先找到你的机器上安装pandas软件包的位置,即打开python终端并输入

    import pandas
    pandas.__file__
    
    Run Code Online (Sandbox Code Playgroud)

    这应该打印出类似的东西 '/usr/local/lib/python3.4/site-packages/pandas/__init__.py'

  2. 现在从该位置复制pandas文件夹(在本例中'/usr/local/lib/python3.4/site-packages/pandas)并将其放入存储库中.
  3. 使用像这样的pandas打包你的Lambda代码:

    zip -r9 my_lambda.zip pandas/
    zip -9 my_lambda.zip my_lambda_function.py
    
    Run Code Online (Sandbox Code Playgroud)

您还可以将代码部署到S3,并使Lambda使用S3中的代码.

aws s3 cp  my_lambda.zip s3://dev-code//projectx/lambda_packages/
Run Code Online (Sandbox Code Playgroud)

这是让你开始的回购


sha*_*adi 14

repo mthenw/awesome-layers列出了几个公开可用的 aws lambda 层。

特别是,keithrozario/Klayers有 pandas+numpy 并且截至今天是最新的 pandas 0.25。

它的 ARN 是 arn:aws:lambda:us-east-1:113088814899:layer:Klayers-python37-pandas:1


Moe*_*Moe 12

经过一些修补和大量的谷歌搜索后,我能够使一切工作,并设置一个可以在将来克隆的回购.

关键要点:

  1. 所有静态包都必须在ec2 amazon Linux实例上编译
  2. python代码需要在执行之前加载lib /文件夹中的库.

Github回购:https: //github.com/moesy/AWS-Lambda-ML-Microservice-Skeleton


b3r*_*rt0 11

我知道这个问题是几年前提出的,当时 Lambda 处于不同的阶段。

我最近遇到了类似的问题,我认为在这里为未来面临相同问题的用户添加最新的解决方案是个好主意。

原来亚马逊在 re:Invent 2018 中发布了层的概念。这是一个很棒的功能。这篇中篇文章比我在这里描述的要好得多:为 Python Pandas 库创建新的 AWS Lambda 层

  • 不确定这是对原始问题的答案。您仍然需要通过包含正确编译的二进制文件的部署包创建 Lambda 层。Lambda Layers 只是让这些依赖项可以跨多个函数重用。 (3认同)

小智 10

让 pandas 在 Lambda 函数中工作的最简单方法是利用 Lambda Layers 和 AWS Data Wrangler。Lambda 层是包含库或依赖项的 zip 存档。根据 AWS 文档,使用层可以使部署包变小,从而使开发变得更容易。

AWS Data Wrangler 是一个开源包,它将 pandas 的功能扩展到 AWS 服务。

请按照此处的说明(在 AWS Lambda Layer 下)进行操作。


ash*_*ium 5

另一种选择是下载本文中讨论的预编译轮文件:https://aws.amazon.com/premiumsupport/knowledge-center/lambda-python-package-company/

\n\n

本质上,您需要转到https://pypi.org上的项目页面并下载如下名称的文件:

\n\n
    \n
  • 对于 Python 2.7:模块名称版本-cp27-cp27mu-manylinux1_x86_64.whl
  • \n
  • 对于 Python 3.6:模块名称版本-cp36-cp36m-manylinux1_x86_64.whl
  • \n
\n\n

然后将 .whl 文件解压缩到您的项目目录,并将内容与 lambda 代码一起重新压缩。

\n\n

注意:主要 Python 函数文件必须位于生成的部署包 .zip 文件的根文件夹中。其他 Python 模块和依赖项可以位于子文件夹中。就像是:

\n\n
my_lambda_deployment_package.zip\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80lambda_function.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80numpy\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80[subfolders...]\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pandas\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80[subfolders...]\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80[additional package folders...]\n
Run Code Online (Sandbox Code Playgroud)\n