我有下面这将只是解析包含json对象的文本文件,然后转换成一个数据帧,然后保存到磁盘作为csv。我试图弄清楚这是否是最节省内存的方法,以及是什么逐渐耗尽了我的内存,因为它运行在大约200个不同的文件上,每个文件被保存为1-10M行。我注意到,当它完成的时候,我的内存消耗了超过50GB。更具体地说,如果我不想做任何分析,只想将数据转换成csv,那么使用Pandas和Dataframes是最佳选择吗?是否有一种不同的实现不会降低我的内存?你知道吗
def readfiles(pattern, sourcefile):
#iterate through all zip files in datadir and yield trigger data
try:
with zipfile.ZipFile(sourcefile, 'r') as myzip:
for logfile in myzip.namelist():
for line in myzip.open(logfile):
try:
line = ujson.loads(line.rstrip('\n').rstrip(','))
if pattern in line:
for i in line['key1']:
yield i, line['key2']['key3'],\
line['key4']['key5'],line['key6'],\
line['key7']['key8'],line['key9']['key10']
except ValueError as err:
pass
except zipfile.error, e:
pass
def convertdfcsv(lines, filename):
"""Consumer for readfiles function that saves dataframe as csv."""
df = pd.DataFrame.from_records(lines)
#return df
df.to_csv(os.path.join(triggertempdir, filename), index=False, header=None)
print("Completed Processing {}".format(filename))
def main(pattern, min_date, max_date):
"""Main function to initiate pipeline"""
sourcezipfiles = retrieve_from_s3(date)
lines = readfiles(pattern, i)
csvout = '{}.csv'.format(i[:-4])
convertdfcsv(lines, csvout)
我只想使用命令行工具,如jq,或json2csv,但我还不理解您的解析。你知道吗
下面是一个将提取key1和key2并以逗号分隔的形式输出的示例: jq-r'[.key1,.key2]|@csv'
相关问题 更多 >
编程相关推荐