Как уменьшить время, необходимое для открытия большого файла CSV в Джулии (с использованием CSV и DataFrames)? - PullRequest
0 голосов
/ 24 сентября 2018

Я пользователь R с большим интересом к Julia и очень хочу перейти на Julia в долгосрочной перспективе.Я искал большой файл CSV в Интернете, нашел этот веб-сайт правительства США и загрузил набор данных College Scorecard.Я попытался прочитать файл 'csv' в Juno с помощью следующей команды:

using CSV
using DataFrames

@time df = CSV.read("/Path/to/Most-Recent-Cohorts-Scorecard-Elements.csv", rows_for_type_detect = 7175);

Я получил следующий вывод:

212.333866 seconds (43.84 M allocations: 2.244 GiB, 0.25% gc time)

Я вставил строку rows_for_type_detect = 7175, потому чтов противном случае я получаю сообщение об ошибке, не могу открыть файл.См. этот другой вопрос , почему это может произойти

При выполнении той же операции в R с

start_time <- Sys.time()
df_try = read.csv("/Path/to/Most-Recent-Cohorts-Scorecard-Elements.csv")
end_time <- Sys.time()
end_time - start_time

я получаю следующий вывод

Time difference of 0.3337972 secs

Есть ли способ более эффективно читать большие кадры данных в Julia?

ОСНОВНОЕ РЕДАКТИРОВАНИЕ

Как указывает @ BogumiłKamiński, это различие между R и Julia для этой конкретной задачи БОЛЬШО УМЕНЬШАЕТСЯ при использовании новейших версий Julia и CSV.Поэтому, пожалуйста, прочитайте мое сообщение выше (которое я, честно говоря, не решался просто удалить) со значительной долей соли и прочитайте комментарий Bogumił Kamiński!И большое спасибо всем разработчикам, которые тратят свое свободное время на создание и совершенствование замечательного языка, такого как Julia бесплатно!

РЕДАКТИРОВАТЬ N ° 2

теперь при выполнении

@time df = CSV.read(joinpath("/path/to/file.csv"))

Вот результат

0.184593 seconds (223.44 k allocations: 5.321 MiB)

Brilliant!Спасибо @ Bogumił Kamiński!

1 Ответ

0 голосов
/ 24 сентября 2018

Возможно, вам следует попробовать использовать https://github.com/queryverse/CSVFiles.jl

Этот пакет обеспечивает поддержку загрузки и сохранения файлов CSV в пакете FileIO.jl .

Эточасть Queryverse экосистемы .

using CSVFiles, DataFrames
fname = "/Path/to/Most-Recent-Cohorts-Scorecard-Elements.csv"
df = DataFrame(load(fname))

но, как предположил Богумил Каминьски, возможно, просто использование последней основной версии CSV.jl может помочь улучшить производительность, но я думаю, что знание об этом довольноНовая вселенная Queryverse является чем-то важным для сообщества Джулии.

Если вам нужно несколько раз загрузить один и тот же большой файл, возможно, вам следует рассмотреть другой тип формата, поскольку текстовые данные достаточно долго обрабатываются.Бинарный формат со сжатием может быть тем, что вам следует рассмотреть, если бы для вас действительно важна быстрая загрузка.

Может быть, вам стоит взглянуть на:

...