web-dev-qa-db-ja.com

AWSLambda関数で寄木細工のファイルを作成する

Parquetに変換したいS3上の(1 Mb)CSV/JSONファイルのセットを受け取ります。 Lambda関数を使用してこのファイルをParquetに簡単に変換できることを期待していました。

Googleを調べた後、なんらかのHadoopがなければ、これに対する解決策は見つかりませんでした。

これはファイル変換であるため、これに対する簡単な解決策がないとは信じられません。誰かがこの変換を行うためのJava/Scalaサンプルコードを持っていますか?

11
oleber

入力JSONファイルが大きくなく(<64 MB、ラムダがメモリキャップに達する可能性が高い)、単純なデータ型を持っているか、構造体をフラット化する場合は、 pyarrow の使用を検討してください。 、ルートは少し複雑ですが。

パンダ の使用が含まれていました:

df = pd.read_json(file.json)

その後、寄木細工のファイルに変換します。

pq = pa.parquet.write_table(df, file.pq)

上記の例では、データ型の自動推論を行います。 JSONの読み込み中に引数dtypeを使用すると、オーバーライドできます。唯一の大きな欠点は、pyarrowがstring, bool, float, int, date, time, decimal, list, arrayしかサポートしていないことです。

更新(より一般的な解決策)

json2parquet の使用を検討してください。

ただし、入力データにネストされた辞書がある場合は、最初にフラット化する必要があります。つまり、次のように変換します。

{a: {b: {c: d}}} to {a.b.c: d}

次に、このデータをjson2parquetを使用してpyarrowバッチとして取り込む必要があります。

pa_batch = j2p.ingest_data(data)

これで、バッチをPyArrowデータフレームとしてロードできます。

df = pa.Table.from_batches([pa_batch])

寄木細工のファイルに出力:

pq = pa.parquet.write_table(df, file.pq)
2
siberiancrane

AWSLambdaを使用して寄木細工の形式に変換する方法はないと思います。ただし、簡単な方法の1つは、Glue Crawlerを使用してS3から取得し、ETLジョブを寄木細工に変換して必要な場所に保存することです。

1
Zeitgeist