在一个8核,14GB的实例上,类似这项工作的工作需要大约2周的时间才能完成,并且需要花费大量的改变,因此任何有关加速的帮助都将受到高度赞赏。
我有一个SQL表,每行有660万行,两列,整数。整数表示大熊猫的数据框架位置(与我一起,填充这些框架位置纯粹是为了取消一些处理时间,但实际上并没有减少):
整数上升到26000,对于每个整数,我们期待5-250的范围:
it_starts it_ends
1 5
2 6
...
25,996 26000
...
...
1 6
2 7
...
25,995 26000
...
...
1 7
2 8
...
25,994 26000
如果情况不够清楚,表格中填写的内容如下:
chunks = range(5,250)
for chunk_size in chunks:
x = np.array(range(1,len(df)-chunk_size))
y = [k+chunk_size for k in x]
rng_tup = zip(x,y)
#do table inserts
正如我所说,我使用此表从pandas数据帧中获取切片,其中包含以下内容:
rngs = c.execute("SELECT it_starts,it_ends FROM rngtab").fetchall()
for k in rngs:
it_sts=k[0]
it_end=k[1]
fms = df_frame[it_sts:it_end]
我在'df_frame'
使用了以下pandas代码,而db
是相关数据库:
with db:
sqla =("SELECT ctime, Date, Time, high, low FROM quote_meta)
df =psql.read_sql(sqla, db)
df_frame = df.iloc[:,[0,1,2,3,4]]
因此,为了清晰起见,将它们放在一起:
import sqlite3
import pandas.io.sql as psql
import pandas as pd
db= sqlite3.connect("HIST.db")
c = db.cursor()
c.execute("PRAGMA synchronous = OFF")
c.execute("PRAGMA journal_mode = OFF")
with db:
sqla =("SELECT ctime, Date, Time, high, low FROM quote_meta)
df =psql.read_sql(sqla, db)
df_frame = df.iloc[:,[0,1,2,3,4]]
rngs = c_rng.execute("SELECT it_starts,it_ends FROM rngtab").fetchall()
for k in rngs:
it_sts=k[0]
it_end=k[1]
fms = df_frame[it_sts:it_end]
for i in xrange(0,len(fms)):
#perform trivial (ish) operations on slice,
#trivial compared to the overall time that is.
正如您可能已经猜到的那样,'df_frame[it_sts:it_end]'
正在造成巨大的瓶颈,因为它需要创建~6m切片(总共40个独立的数据库)),因此我认为投资一点是明智的在这里问这个问题;在我投入更多资金之前,我在这里犯了任何重大错误吗?有什么人可以建议加快速度吗?感谢。