初始化具有 1500 万条记录的极地数据帧会导致机器冻结

问题描述 投票:0回答:1

我正在使用 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 数据框时,问题发生了。

有没有更好的方法来初始化我的数据框,这样我就不会遇到这个问题?有人可以帮我解决这个问题吗?

谢谢

python pandas dataframe psycopg2 python-polars
1个回答
0
投票

正如 @AdrianKlaver 在上述评论中所建议的,我尝试使用 Polars read_database_uri 而不是 psycopg3 来获取 AWS RDS Postgres 记录,并且它工作得很好,我的机器没有挂起 1500 万条记录。以下是步骤:

  1. 安装连接器x

  2. 获取 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)

© www.soinside.com 2019 - 2024. All rights reserved.