【发布时间】:2020-06-03 11:56:06
【问题描述】:
我有需要附加到 csv 文件的数据增强代码。数据量以百万计。需要2-3天。有更快的替代方案吗?如果我们需要数百万级的追加操作,HDF5 的速度有多快?
编辑:代码:仅供参考
def insert_data(directory, annotated_csv, output_csv):
data = pd.read_csv(annotated_csv)
data.to_csv(output_csv,index = False)
counter = 0
print("number of files: ", len(os.listdir(directory)))
datachunk = []
for fname in glob.glob(directory + '/*jpg'):
fname = fname.split('/')[-1]
counter = counter + 1
if counter % 10000 == 0:
df_tmp = pd.DataFrame(data=datachunk, columns=data.columns)
df_tmp.to_csv(output_csv,mode = 'a', index = False, header=False)
datachunk = []
print("counter: "+ str(counter))
try:
ofile = fname.split("-")[0]
flabel = "'" + fname.split("-")[3] + "'"
ofile = ofile +'.jpg'
BB, MB, SB = get_all_bb(data, ofile)
BB[0] = fname
MB[0] = fname
SB[0] = fname
BB[7] = flabel
MB[7] = flabel
SB[7] = flabel
datachunk.append(BB)
datachunk.append(MB)
datachunk.append(SB)
except:
print("Exception on"+ str(fname))
pass
df_tmp = pd.DataFrame(data=datachunk, columns=data.columns)
df_tmp.to_csv(output_csv,mode = 'a', index = False, header=False)
print("counter: "+ str(counter))
这段代码只是让我们一瞥正在发生的事情。
【问题讨论】:
-
它不能在数据库中工作?
-
@sammywemmy 不,它不能。
-
请分享您的代码。
-
您是否分析过您的代码以查看慢速部分是什么? (我假设
get_all_bb?)这看起来令人尴尬的并行(只需将for循环放入multiprocessing并从处理函数返回BB, MB, SB三元组)。 -
另外,代替 Pandas,尝试将
pickled 对象附加到一个文件(或多个文件)中。然后,您可以将它们后处理为 CSV 或其他您有空的文件。