AWS Lambdaを使用してS3でParquetファイルをロード、処理、および書き込みしようとしています。私のテスト/展開プロセスは:
2つの可能なアプローチがあるようですどちらもローカルでDockerコンテナーに機能します:
s3fsを使用したpyarrow: https://github.com/Apache/arrow/pull/916 に従い、ラムダ関数で実行すると、次のいずれかが得られます。
OSError: Passed non-file path: s3://mybucket/path/to/myfile
pyarrow/parquet.pyの848行目。ローカルではIndexError: list index out of range
pyarrow/parquet.pyの714行目OSError: Passed non-file path: s3://mybucket/path/to/myfile
pyarrow/parquet.pyの848行目。私の質問は:
ありがとう!
Fastparquetを使用してS3に寄木細工ファイルを書き込むことができました。それは少しトリッキーですが、私のブレークスルーは、すべての依存関係をまとめるために、Lambdaが使用しているものとまったく同じLinuxを使用する必要があることに気付いたときに生まれました。
ここに私がそれをした方法があります:
出典: https://docs.aws.Amazon.com/lambda/latest/dg/current-supported-versions.html
注:このLinuxは開発用ではないため、多くのパッケージをインストールしてpythonバージョンを3.6に変更する必要がある場合があります。パッケージの検索方法は次のとおりです。
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より大きくZipが260Mを超えるZipをアップロードできません。依存関係をLambdaに取り込むより良い方法を誰かが知っている場合は、共有してください。
これは環境の問題でした(VPCのLambdaがバケットにアクセスできない)。 Pyarrowは現在動作しています。
うまくいけば、質問自体が、それらすべてを機能させる方法についての十分な概要を提供します。