我在oracle sql中有一个具有20亿行的表,并且我打算将该数据加载到pandas数据帧中。我有足够的内存空间(〜64GB),并使用Intel optane作为交换空间内存问题。我面临的问题是要花费很多时间来加载数据。
当前,我正在使用以下查询。
query = """select /*+parallel(35)*/ * from twistdw"""
df = pd.read_sql(query, conn)
该脚本永远需要运行。
我也尝试过
chunk_size = 5000000
offset = 0
dfs=[]
while True:
query = """select /*+parallel(35)*/ * from twistdw;"""
dfs.append(psql.read_sql(query, conn_twist, chunksize=chunk_size))
offset += chunk_size
if len(dfs[-1]) < chunk_size:
break
full_df = pd.concat(dfs)
上面的查询抛出错误:
Traceback (most recent call last):
File "<ipython-input-13-c133ce6f47b0>", line 14, in <module>
if len(dfs[-1]) < chunk_size:
TypeError: object of type 'generator' has no len()
我可以得到一些帮助吗?
答案 0 :(得分:0)
如果指定了chunksize
,则read_sql
返回一个迭代器:
chunk_size = 5000000
query = """select /*+parallel(35)*/ * from twistdw;"""
reader = pd.read_sql(query, conn_twist, chunksize=chunk_size)
full_df = pd.concat(reader, ignore_index=True)