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("データあり")
参考
この記事は以下の情報を参考にしました。