另一个选择可能是使用multiprocessing模块,将查询分割并发送给多个并行进程,然后连接结果。在
在不了解pandas分块的情况下,我认为您必须手动进行分块(这取决于数据)。。。不要使用限制/偏移-性能会很糟糕。在
这可能不是一个好主意,取决于数据。如果有一种有用的方法来分割查询(例如,如果它是一个timeseries,或者有某种适当的索引列可以使用,这可能是有意义的)。我在下面放了两个例子来展示不同的案例。在
例1import pandas as pd
import MySQLdb
def worker(y):
#where y is value in an indexed column, e.g. a category
connection = MySQLdb.connect(user='xxx', password='xxx', database='xxx', host='xxx')
query = "SELECT * FROM example_table WHERE col_x = {0}".format(y)
return pd.read_sql(query, connection)
p = multiprocessing.Pool(processes=10)
#(or however many process you want to allocate)
data = p.map(worker, [y for y in col_x_categories])
#assuming there is a reasonable number of categories in an indexed col_x
p.close()
results = pd.concat(data)
示例
^{pr2}$
可能是更好的方法(而且还没有经过适当的测试等等)。有兴趣知道如果你尝试的话会怎么样。在