Корневая папка D:/data/
. Внутри этой корневой папки есть много подпапок. Файлы CSV хранятся внутри подпапок, например.Как ускорить чтение файла CSV в R
D:/data/
f1
1.csv
2.csv
f2
1.csv
2.csv
Я использую следующий код для чтения своих CSV-файлов. Однако для чтения около 20 000 CSV-файлов требуется несколько часов.
allFolders = list.files("D:/data/")
for(folder in 1:length(allFolders))
{
dirPath = paste0("D:/data/", allFolders[folder], '/')
for(i in 1:100)
{
f = fread(paste0(dirPath, i, ".csv"))
# data processing
}
}
Любая идея, как я могу ускорить этот процесс в Windows? Я попытался использовать пакет foreach
, однако производительность была почти такой же, вероятно, из-за ограничения скорости устройства ввода-вывода.
Update:
Это, как я реализую foreach
:
allFolders = list.files("D:/data/")
for(folder in 1:length(allFolders))
{
allf <- vector(mode = "list", length = 100)
allf <- foreach(i=1:100, .combine=rbind)
{
f = data.table::fread(paste0(dirPath, i, ".csv"))
f
}
}
'fread' обычно является демоном скорости, и я подозреваю, что это не то место, где есть узкое место. Можете ли вы преобразовать CSV-файлы в базы данных SQLite (или разместить их как таблицы в одной базе данных SQLite)? Можете ли вы опубликовать установочный код для попыток 'foreach', который вы сделали? Это может быть что-то в том, как вы выполняете конфигурацию параллельной обработки. – hrbrmstr
@hrbrmstr Я сомневаюсь, что SQLite обеспечит улучшение. –
Вы должны заметить, что 'fread' находится в пакете' data.table'. Если это действительно так, то «fread». Его нет в базе R. – Spacedman