何らかの理由で、pandas read_sql の「chunksize」引数は AWS Data API でうまく機能しません。ところで、MySQL を使用していますが、pydataapi は両方をサポートする必要があります。
この問題に対して私が見つけた解決策は、pandas のread_sqlと文字列形式の LIMIT を使用してデータベースを繰り返しクエリすることです。これはpydataapi python パッケージを使用します。
最初に構文を使用してテーブルの長さを取得しました
df_status = pd.read_sql('show table status like "yourtable";', con = sql_engine)
次に、numpy.arange() を使用して、リクエストの開始行を決定します。各クエリは、ここで「chunksize」パラメーターで指定された行数を要求します。私は 20,000 を選択しましたが、応答が 1MB を超えない最大値を選択する必要があります。
次に、データフレームのリストを連結するだけです。これが今のところ最適なソリューションであることがわかりました。
import pandas as pd
import numpy as np
import boto3
from sqlalchemy import create_engine
cluster_arn = 'yourcluster'
secret_arn = 'yoursecret'
database = 'mydb'
chunksize = 20000
rdsData = boto3.client('rds-data', region_name = 'yourregion')
sql_engine = create_engine('mysql+pydataapi://',
connect_args = {
'resource_arn': cluster_arn,
'secret_arn': secret_arn,
'database': database,
'client': rdsData}).connect()
df_status = pd.read_sql("show table status like 'yourtable';", con = sql_engine)
rownum = df_status.loc[0, "Rows"]
space = np.arange(0, rownum, chunksize)
space = space.tolist()
space.append(rownum)
df_list = []
for i in space:
df = pd.read_sql("select * from yourtable LIMIT {}, {}".format(i, chunksize), con = sql_engine)
df_list.append(df)
big_df = pd.concat(df_list)
sql_engine.close()