Потоковые пакеты из файлов bz2 в Python VS R - PullRequest
0 голосов
/ 31 марта 2019

Я хочу обработать огромное количество .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)
...