Ryota Kondo

Ryota Kondo

2024/01/20

AWS SDK for pandas|S3にあるCSVのデータ有無を効率よく判定する方法

PythonライブラリのAWS SDK for pandas (awswrangler)を使っている場合に、Amazon S3にあるCSVファイルのデータ有無(=ヘッダーのみかどうか)を効率よく判定する方法について今回は説明します。

活用できる箇所として、例えば、RDS for PostgreSQL DBのテーブルにCSVファイルをインポートするaws_s3.table_import_from_s3関数はデータが0件だと下のエラーが発生するため、処理前にデータ有無を判定し、エラーを避けるといったものがあります。

Import from S3 failed, 0 rows were copied successfully

やり方

データ有無の判定に全量を読み込む必要はないので、最低限判定に必要な1件までデータを読み込み判定を行います。

こうすることでメモリ消費を抑え、処理時間を短くすることができます。

S3にあるCSVファイルを読み込むawswrangler.s3.read_csv()の引数にnrows=1を渡すことで最大1件までデータを読み込むようになります。

サンプルコード
import awswrangler as wr

def is_no_data_csv(file_s3_uri):
    """指定したS3 uriのcsvがデータ無し(=ヘッダーのみ)であるか判定する"""

    df = wr.s3.read_csv(
        file_s3_uri,
        header=0,  # 1行目はヘッダーとして読み込む
        nrows=1,  # データ確認のみなので最大1件のみ読込む
    )

    return len(df) == 0

if is_no_data_csv("s3://<バケット名>/sample01.csv"):
    print("データなし")
else:
    print("データあり")

参考

この記事は以下の情報を参考にしました。

関連タグの記事

Ryota Kondo
Ryota Kondo

システムエンジニア・プログラマー|このブログサイトの運営もしており、思いついたことをまとめて記事を書いています💡|Twitterのフォローはお気軽に