Я хочу обработать огромное количество .bz2, которые больше моей оперативной памяти.Поэтому я не могу прочитать весь файл.
В R-Studio я использую следующий код, который позволяет мне обрабатывать пакеты.
#libraries
library(dplyr)
library(jsonlite)
#connection to output file
con_out = file("test3.json", open ="w")
#open input connection
o <- 1 #file number
file<-bzfile(description= paste("D:/data/", o, ".bz2", sep =""), open = "r", encoding = getOption("encoding"),
compression = 9)
#streaming and filtering data
df<- stream_in(con=file ,handler = function(df)
{
df <- dplyr::filter(df, ups > 1)
stream_out(df, con = con_out)
}
,pagesize = 10000, verbose = TRUE)
}
close(file)
Теперь мне интересно, можете ли высделать то же самое в Python?Я написал следующий код, который обрабатывает файлы построчно.Но это довольно медленно.
directory = os.fsencode("D:\\data")
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith("bz2"):
filename = str("D:\\data\\" + filename)
filename_json = str(filename[:-3] + "json")
with bz2.open(filename, "rt") as bzinput:
with open(filename_json, "x") as jsonOutput:
lines = []
for i, line in enumerate(bzinput):
line_json = ujson.loads(line)