装载 5 百万线B. Pandas 的 MySQL

我有 5 百万线B. MySQL DB坐在 /当地的/ 网络 /快速连接,而不是在互联网上/.

连接S. DB 工作正常,但如果我试图这样做


f = pd.read_sql_query/'SELECT * FROM mytable', engine, index_col = 'ID'/


它需要

高度

很多时间。 甚至是碎片。
chunksize

会很慢。 另外,我真的不知道他是否只是挂在那里或真正提取信息。

我想问那些与大数据一起工作的人 DB, 他们如何提取他们的会话数据 Pandas?

那将会 "smarter", 例如,要启动请求,请返回文件 csv 结果和下载

他的

在 Pandas? 听起来比应该更令人困惑。
已邀请:

石油百科

赞同来自:

下载的最佳方法

全部

来自任何数据库的表中的数据 SQL 在熊猫是:

从数据库中卸载数据
http://www.postgresql.org/docs ... .html
为了 PostgreSQL,
https://dev.mysql.com/doc/refm ... .html
为了 MySQL 或类似于其他方言。

阅读文件 csv 使用功能 pandas 通过
http://pandas.pydata.org/panda ... .html
pandas.read_csv


使用只读连接器

多行

. 权力数据库 SQL 它能够基于索引提供基于索引的小型数据碎片。

交付整个表格 - 这就是你对转储的作用。

知食

赞同来自:

使用数据库时我有类似的问题 Oracle /对我来说,让所有数据都需要很多时间,并且在此期间,我不知道它有多远,还有什么 - 那个问题/ - 我的决定是将我的请求结果传达给文件集。 csv, 然后下载它们 Pandas.

我相信有更快的方法可以做到这一点,但它对一组数据来说令人惊讶的是 8 百万线。

您可以看到我在我的页面上使用的代码 Github 为了 easy_query.py
https://github.com/MrTomKimber ... ry.py
但我使用的基本功能看起来像这样:


def SQLCurtoCSV /sqlstring, connstring, filename, chunksize/:
connection = ora.connect/connstring/
cursor = connection.cursor//
params = []
cursor.execute/sqlstring, params/
cursor.arraysize = 256
r=[]
c=0
i=0
for row in cursor:
c=c+1
r.append/row/
if c >= chunksize:
c = 0
i=i+1
df = pd.DataFrame.from_records/r/
df.columns = [rec[0] for rec in cursor.description]
df.to_csv/filename.replace/'%%',str/i//, sep='|'/
df = None
r = []
if i==0:
df = pd.DataFrame.from_records/r/
df.columns = [rec[0] for rec in cursor.description]
df.to_csv/filename.replace/'%%',str/i//, sep='|'/
df = None
r = []


周围模块导入 cx_Oracle, 提供不同的数据库 hooks/api-calls, 但是我预计使用类似的功能,使用一些类似提供的功能 MySQL api.

这很好,所以这就是你可以看到你选择的目录中的文件如何累积,因此您可以获得一些关于您的提取物品是否有效的反馈以及结果 second/minute/hour 你可以期待得到。

它也意味着您可以使用源文件 rest 提取。

一旦所有数据保存在单独的文件中,它们就可以加载到一个 Pandas dataframe, 使用几个运算符 pandas.read_csv 和 pandas.concat.

石油百科

赞同来自:

query

: 写下你的请求。

conn

: 连接到您的数据库

chunksize

: 删除这些包。 返回生成器。

尝试使用下面的代码在零件中提取数据。 然后使用该函数转换生成器对象 dataframe.


df_chunks = pd.read_sql_query/query, conn, chunksize=50000/

def chunks_to_df/gen/:
chunks = []
for df in gen:
chunks.append/df/
return pd.concat/chunks/.reset_index//.drop/'index', axis=1/

df = chunks_to_df/df_chunks/


这将帮助您减少数据库服务器上的负载,并在包中获取所有数据并使用它们进行进一步分析。

要回复问题请先登录注册