我正在尝试使用AWS Lambda在S3中加载,处理和编写Parquet文件。我的测试/部署过程是:
似乎有两种可能的方法,在本地工作到docker容器:
带有s3fs的pyarrow:我跟着https://github.com/apache/arrow/pull/916,当使用lambda函数执行时,我得到:
OSError: Passed non-file path: s3://mybucket/path/to/myfile
中,第848行。我在本地获取{ {1}}在pyarrow / parquet.py,第714行IndexError: list index out of range
。我的问题是:
谢谢!
答案 0 :(得分:5)
AWS有一个项目(AWS Data Wrangler),该项目允许其完全支持Lambda Layers。
在文档中有一个step-by-step可以完成。
代码示例:
import awswrangler as wr
# Write
wr.s3.to_parquet(
dataframe=df,
path="s3://...",
dataset=True,
database="my_database", # Optional, only with you want it available on Athena/Glue Catalog
table="my_table",
partition_cols=["PARTITION_COL_NAME"])
# READ
df = wr.s3.read_parquet(path="s3://...")
答案 1 :(得分:3)
我能够使用fastparquet将镶木地板文件写入S3。这有点棘手,但是当我意识到将所有依赖项组合在一起时,我必须使用与Lambda正在使用的完全相同的Linux。
以下是我的表现:
来源: https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html
注意:您可能需要安装许多软件包并将python版本更改为3.6,因为此Linux不适用于开发。以下是我寻找包裹的方式:
sudo yum list | grep python3
我安装了:
python36.x86_64
python36-devel.x86_64
python36-libs.x86_64
python36-pip.noarch
python36-setuptools.noarch
python36-tools.x86_64
mkdir parquet
cd parquet
pip install -t . fastparquet
pip install -t . (any other dependencies)
copy my python file in this folder
zip and upload into Lambda
注意:我必须解决一些限制因素:Lambda不允许您上传更大的50M拉链并解压缩> 260M。如果有人知道更好的方法来获取Lambda的依赖关系,请分享。
答案 2 :(得分:2)
这是一个环境问题(VPC中的Lambda无法访问存储桶)。 Pyarrow现在正在工作。
希望问题本身能够对如何使所有工作做出足够好的概述。
答案 3 :(得分:0)
一个人也可以通过AWS sam cli和Docker实现这一点(我们将在后面解释这一要求)。
1。创建目录并初始化sam
mkdir some_module_layer
cd some_module_layer
sam init
通过键入最后一个命令,将提示一系列三个问题。可以选择以下一系列答案(我正在考虑在Python3.7下工作,但其他选择也是可行的)。
1-AWS快速入门模板
8-Python 3.7
项目名称[sam-app]:some_module_layer
1-Hello World示例
2。修改requirements.txt文件
cd some_module_layer
vim hello_world/requirements.txt
这将在vim上打开requirements.txt
文件,在Windows上,您可以键入code hello_world/requirements.txt
来在Visual Studio Code中编辑该文件。
3。将pyarrow添加到requirements.txt
沿着pyarrow,它将包括另外的pandas
和s3fs
。在这种情况下,包括熊猫将避免它不会将pyarrow
识别为读取镶木地板文件的引擎。
pandas
pyarrow
s3fs
4。用容器构建
运行--use-container
命令时,要求Docker使用选项sam build
。如果是第一次,它将拉出lambci/lambda:build-python3.7
Docker映像。
sam build --use-container
rm .aws-sam/build/HelloWorldFunction/app.py
rm .aws-sam/build/HelloWorldFunction/__init__.py
rm .aws-sam/build/HelloWorldFunction/requirements.txt
请注意,我们仅保留python库。
5。压缩文件
cp -r .aws-sam/build/HelloWorldFunction/ python/
zip -r some_module_layer.zip python/
在Windows上,可以运行 Compress-Archive python/ some_module_layer.zip
。
6。将zip文件上传到AWS
以下link对此很有用。