我在使用python2.7和pandas和HDFStore
我试图处理一个大数据集,它可以放入磁盘,但不能放入内存。在
我把一个大数据集存储在一个.h5文件中,每一列中的数据大小不是恒定的,例如,一列一行可能有5个字符的字符串,另一个列可能有20个字符的字符串。在
因此,当第一次迭代包含较小的数据,而随后的批处理包含较大的数据时,我在迭代中将数据写入文件时遇到了问题。在
我发现问题是min_大小没有正确使用,数据不适合列,我使用以下代码将数据库缓存到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()
在每一个查询中,的情况下,
我发现我可以使用磁盘内数据帧的dask来处理数据,但它缺少pandas中需要的一些功能,所以主要思想是批量处理数据,并将其附加到现有的HDFStore文件中。在
谢谢!在
我发现问题是hdf优化数据存储并计算每列最大值的大小
我找到了两种方法来解决这个问题: 1.预查询数据库,获取每列的最大数据字符长度 2.将每一批插入到文件中的一个新键中,然后它工作,每个批将被插入到hdf文件中,使用它的最大值作为列中的最大值
相关问题 更多 >
编程相关推荐