AWSLambda関数で寄木細工のファイルを作成する
Parquetに変換したいS3上の(1 Mb)CSV/JSONファイルのセットを受け取ります。 Lambda関数を使用してこのファイルをParquetに簡単に変換できることを期待していました。
Googleを調べた後、なんらかのHadoopがなければ、これに対する解決策は見つかりませんでした。
これはファイル変換であるため、これに対する簡単な解決策がないとは信じられません。誰かがこの変換を行うためのJava/Scalaサンプルコードを持っていますか?
入力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)
AWSLambdaを使用して寄木細工の形式に変換する方法はないと思います。ただし、簡単な方法の1つは、Glue Crawlerを使用してS3から取得し、ETLジョブを寄木細工に変換して必要な場所に保存することです。