web-dev-qa-db-ja.com

AWS Lambda(Python 3)を使用してS3に保存されているParquetファイルを読み取る

AWS Lambdaを使用してS3でParquetファイルをロード、処理、および書き込みしようとしています。私のテスト/展開プロセスは:

2つの可能なアプローチがあるようですどちらもローカルでDockerコンテナーに機能します

  1. s3fsを使用したfastparquet:残念ながら、パッケージの解凍されたサイズは256MBを超えているため、Lambdaコードを更新することはできません。
  2. s3fsを使用したpyarrow: https://github.com/Apache/arrow/pull/916 に従い、ラムダ関数で実行すると、次のいずれかが得られます。

    • URIの前にS3またはS3Nを付けた場合(コード例のように):Lambda環境OSError: Passed non-file path: s3://mybucket/path/to/myfile pyarrow/parquet.pyの848行目。ローカルではIndexError: list index out of range pyarrow/parquet.pyの714行目
    • URIの前にS3またはS3Nを付けない場合:ローカルで機能します(寄木細工のデータを読み取ることができます)。 Lambda環境では、同じOSError: Passed non-file path: s3://mybucket/path/to/myfile pyarrow/parquet.pyの848行目。

私の質問は:

  • lambda環境とは異なる結果がdockerコンテナーで得られるのはなぜですか?
  • uRIを与える適切な方法は何ですか?
  • aWS Lambdaを介してS3でParquetファイルを読み取るための認められた方法はありますか?

ありがとう!

9
Ptah

Fastparquetを使用してS3に寄木細工ファイルを書き込むことができました。それは少しトリッキーですが、私のブレークスルーは、すべての依存関係をまとめるために、Lambdaが使用しているものとまったく同じLinuxを使用する必要があることに気付いたときに生まれました。

ここに私がそれをした方法があります:

1. Lambdaで使用されるAmazon Linuxイメージを使用してEC2インスタンスを起動します

出典: https://docs.aws.Amazon.com/lambda/latest/dg/current-supported-versions.html

Linuxイメージ: https://console.aws.Amazon.com/ec2/v2/home#Images:visibility=public-images;search=amzn-AMI-hvm-2017.03.1.20170812-x86_64-gp2 =

注:この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

2.ここからの説明を使用して、スクリプトがすべての依存関係を含むZipファイルを作成し、それらをフォルダーにすべてダンプして、次のコマンドで圧縮します。

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に取り込むより良い方法を誰かが知っている場合は、共有してください。

ソース: AWS KinesisファイアホースからAWS S3に寄木細工を書く

3
phoenix

これは環境の問題でした(VPCのLambdaがバケットにアクセスできない)。 Pyarrowは現在動作しています。
うまくいけば、質問自体が、それらすべてを機能させる方法についての十分な概要を提供します。

2
Ptah