【发布时间】:2018-06-07 15:14:10
【问题描述】:
我正在尝试使用 AWS Lambda 在 S3 中加载、处理和编写 Parquet 文件。我的测试/部署过程是:
- https://github.com/lambci/docker-lambda 作为模拟 Amazon 环境的容器,因为需要安装本机库(其中包括 numpy)。
- 这个程序生成一个zip文件:http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-deployment-pkg.html#with-s3-example-deployment-pkg-python
- 在 zip 中添加一个测试 python 函数,将其发送到 S3,更新 lambda 并对其进行测试
似乎有两种可能的方法,都可以在 docker 容器本地工作:
- fastparquet with s3fs:不幸的是,解压后的包大于 256MB,因此我无法用它更新 Lambda 代码。
-
带有 s3fs 的 pyarrow:我关注了https://github.com/apache/arrow/pull/916,当使用 lambda 函数执行时,我得到:
-
如果我在 URI 前加上 S3 或 S3N(如代码示例中所示):在 Lambda 环境中
OSError: Passed non-file path: s3://mybucket/path/to/myfile在 pyarrow/parquet.py 中,第 848 行。本地我在 pyarrow/ 中得到IndexError: list index out of rangeparquet.py,第 714 行 -
如果我不使用 S3 或 S3N 作为 URI 前缀:它可以在本地工作(我可以读取镶木地板数据)。在 Lambda 环境中,我在 pyarrow/parquet.py 的第 848 行中得到了相同的
OSError: Passed non-file path: s3://mybucket/path/to/myfile。
-
如果我在 URI 前加上 S3 或 S3N(如代码示例中所示):在 Lambda 环境中
我的问题是:
- 为什么我在 docker 容器中得到的结果与在 Lambda 环境中不同?
- 给出 URI 的正确方法是什么?
- 是否有一种可接受的方式通过 AWS Lambda 在 S3 中读取 Parquet 文件?
谢谢!
【问题讨论】:
标签: python amazon-s3 aws-lambda parquet pyarrow