【问题标题】:Import huge data-set from SQL server to HDF5将大量数据集从 SQL 服务器导入 HDF5
【发布时间】:2017-12-25 08:03:33
【问题描述】:

我正在尝试将具有 8 列的约 1200 万条记录导入 Python。由于它的巨大尺寸,我的笔记本电脑内存不足以完成此操作。现在我正在尝试将 SQL 数据导入 HDF5 文件格式。如果有人可以共享从 SQL 查询数据并将其保存为 HDF5 格式的代码的 sn-p 代码,那将非常有帮助。我愿意使用任何其他更易于使用的文件格式。

我计划做一些基本的探索性分析,稍后可能会使用 pandas 创建一些决策树/线性回归模型。

import pyodbc 
import numpy as np
import pandas as pd

con = pyodbc.connect('Trusted_Connection=yes',
                     driver = '{ODBC Driver 13 for SQL Server}',
                     server = 'SQL_ServerName')
df = pd.read_sql("select * from table_a",con,index_col=['Accountid'],chunksize=1000)

【问题讨论】:

    标签: sql python-3.x pandas hdf5 hdfstore


    【解决方案1】:

    试试这个:

    sql_reader = pd.read_sql("select * from table_a", con, chunksize=10**5)
    
    hdf_fn = '/path/to/result.h5'
    hdf_key = 'my_huge_df'
    store = pd.HDFStore(hdf_fn)
    cols_to_index = [<LIST OF COLUMNS THAT WE WANT TO INDEX in HDF5 FILE>]
    
    for chunk in sql_reader:
         store.append(hdf_key, chunk, data_columns=cols_to_index, index=False)
    
    # index data columns in HDFStore
    store.create_table_index(hdf_key, columns=cols_to_index, optlevel=9, kind='full')
    store.close()
    

    【讨论】:

    • @user3510503,很高兴它有帮助:)
    • 伙计们,这段代码对于我的加载问题需要很长时间。有没有办法进一步加快这个过程?谢谢!
    • @Mike_H,我认为首先你必须找出你的情况的瓶颈是什么......
    • 瓶颈是内存。 8GB。 @MaxU 或者你的意思是代码块的哪一部分运行时间最长?
    • @Mike_H,是的,我的意思是你的代码中最慢的部分......它可能正在从数据库中读取或将块保存到 HDF5......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2013-09-09
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    相关资源
    最近更新 更多