【问题标题】:How to decrease the time taken to open a large csv file in Julia (using CSV and DataFrames)?如何减少在 Julia 中打开大型 csv 文件所需的时间(使用 CSV 和 DataFrames)?
【发布时间】:2019-02-27 18:20:56
【问题描述】:

我是R 用户,对Julia 非常感兴趣,并且非常愿意长期切换到Julia。我在互联网上查找了一个大的 csv 文件,发现了这个 website of US government 并下载了 College Scorecard 数据集。我尝试使用以下命令读取Juno 中的“csv”文件:

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 行,否则我会收到一条错误消息并且无法打开文件。请参阅this other question 了解为什么会发生这种情况

当在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 所指出的,当使用最新版本的JuliaCSV 时,RJulia 在此特定任务中的这种差异大幅减小。因此,请仔细阅读我上面的信息(坦率地说,我很犹豫是否要简单地删除),并阅读 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)

太棒了!谢谢@Bogumił Kamiński!

【问题讨论】:

  • 我会在这里回答(正如您在另一个线程中提出的类似问题)。我已经测试了这个文件,在我的 Julia 和 R.R 上花费了 1.2 秒,而 Julia 在第一次通话中花费了 2.3 秒,在第二次通话中花费了 1.4 秒(由于预编译导致的差异),因此它们具有可比性。 CSV.jl 在过去几周内经历了重大改进。我建议您等到标记 CSV.jl 的新版本(可能在几天后)或使用包的主版本add CSV#master
  • 亲爱的@BogumiłKamiński。非常感谢您的回答。你完全正确:我实际上使用旧版本的JuliaJulia-Pro-Juno-0.6.2.2 运行了上面的代码。使用Julia 1.0 运行代码时,第一次调用需要 9.6 秒,第二次调用需要 1.4 秒。很抱歉给您带来不便。

标签: csv dataframe julia processing-efficiency memory-efficient


【解决方案1】:

你或许应该尝试使用https://github.com/queryverse/CSVFiles.jl

此包为 FileIO.jl 包下的 CSV 文件提供加载和保存支持。

它是Queryverse ecosystem 的一部分。

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

但正如 Bogumił Kamiński 建议的那样,也许简单地使用最新的 CSV.jl 主版本可以帮助提高性能,但我认为了解这个全新的 Queryverse 世界对于 Julia 社区来说很重要。

如果您必须多次加载同一个大文件,也许您应该考虑另一种格式,因为文本数据的处理时间很长。如果快速加载对您来说真的很重要,您应该考虑使用带有压缩的二进制格式。

也许你应该看看:

【讨论】:

  • csv.jl和csvfiles.jl是什么关系?哪个更快?如果我想流式传输不适合内存的大型数据集,我应该使用哪一个? (例如,以后将其与 OnlineStats 一起使用?
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 2020-03-20
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多