我正在使用 Psycopg3 连接器从 AWS RDS Posgres 数据库获取记录,并使用以下代码初始化 Polars 数据帧:
rds_conn = psycopg.connect(
host=config.RDS_HOST_NAME,
dbname=config.RDS_DB_NAME,
user=config.RDS_DB_USER,
password=config.RDS_DB_PASSWORD,
port=config.RDS_PORT)
cur = rds_conn.cursor(name="rds_cursor")
cur.itersize = 100000
cur.execute(sql_query)
names = [x[0] for x in cur.description]
rows = cur.fetchall()
cur.close()
df = pl.DataFrame(rows, schema=names, infer_schema_length=None)
如果返回的行数约为一百万左右,它就可以正常工作。目前,我在 RDS 中的一个表包含 1500 万条记录,当我初始化 Polars 数据帧时,我的机器冻结,我需要重新启动我的机器。我尝试在 Dataframe 上使用 LazyFrame 但仍然相同。
Psycopg 连接器返回 1500 万条记录,没有任何问题,但当我将其初始化为 Polars 数据框时,问题发生了。
有没有更好的方法来初始化我的数据框,这样我就不会遇到这个问题?有人可以帮我解决这个问题吗?
谢谢
正如 @AdrianKlaver 在上述评论中所建议的,我尝试使用 Polars read_database_uri 而不是 psycopg3 来获取 AWS RDS Postgres 记录,并且它工作得很好,我的机器没有挂起 1500 万条记录。以下是步骤:
安装连接器x
获取 AWS RDS 记录的语法:
uri =“postgresql://RDS_DB_USER:RDS_DB_PASSWORD@RDS_HOST_NAME:RDS_PORT/RDS_DB_NAME” df = pl.read_database_uri(sql_query, uri)