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 文件中
我正在使用 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 文件中