python pandas HDFStore 附加不连续大小的数据

python pandas HDFStore append not contant size data

我正在使用 python 2.7 与 pandas 和 HDFStore

我尝试处理一个大数据集,它适合磁盘但不适合内存。

我在一个.h5文件中存储了一个大数据集,每列数据的大小不是恒定的,例如一列可能有一行5个字符的字符串和20个字符的字符串另一个字符。

所以我在迭代中将数据写入文件时遇到了问题,当时第一次迭代包含的数据量较小,而后续批次包含的数据量较大。

我发现问题是min_size没有正确使用,数据不适合列,我使用以下代码将数据库缓存到h5中没有错误

colsLen = {}
        for col in dbCols:
            curs.execute('SELECT MAX(CHAR_LENGTH(%s)) FROM table' % col)
            for a in curs:
                colsLen.update({col: a[0]})

        # get the first row to create the hdfstore
        rx = dbConAndQuery.dbTableToDf(con, table, limit=1, offset=0) #this is my utility that is querying the db 
        hdf.put("table", table, format="table", data_columns=True, min_itemsize=colsLen)

        for i in range(rxRowCount / batchSize + 1):
            rx = dbConAndQuery.dbTableToDf(con, table, limit=batchSize, offset=i * batchSize + 1)
            hdf.append("table", table, format="table", data_columns=True, min_itemsize=colsLen)

        hdf.close() 

问题是:在无法提前查询每列数据的最大大小的情况下,如何使用HDFStore?例如,由于内存限制,在迭代中获取或创建数据。

我发现我可以在磁盘数据帧中使用 dask 处理数据,但是它缺少我在 pandas 中需要的一些功能,所以主要的想法是批量处理数据,将其附加到现有的 HDFStore 文件。

谢谢!

我发现问题出在hdf优化数据存储和计算每列最大值的大小,

我找到了两种解决方法: 1.Pre查询数据库获取每列的最大数据字符长度 2.inserting 每个批次到文件中的一个新键然后它工作,每个批次将使用它的最大值作为列中的最大值插入到 hdf 文件中