【问题标题】:Read CSV files faster in Julia在 Julia 中更快地读取 CSV 文件
【发布时间】:2021-04-16 00:02:06
【问题描述】:

我注意到使用 CSV.read 加载 CSV 文件非常慢。 作为参考,我附上了一个时间基准的例子:

using CSV, DataFrames
file = download("https://github.com/foursquare/twofishes")
@time CSV.read(file, DataFrame)

Output: 
9.450861 seconds (22.77 M allocations: 960.541 MiB, 5.48% gc time)
297 rows × 2 columns

这是一个随机数据集,与 Julia 相比,此类操作的 Python 替代品编译时间短。既然,julia 比 python 快,为什么这个操作要花这么多时间?另外,有没有更快的方法来减少编译时间?

【问题讨论】:

  • 我认为这是 Julia 1.5?
  • @OscarSmith 是的,我正在使用 Julia 1.5.3
  • 我认为python中的类似操作不会进行任何编译。那么在 python 中谈论更快的编译可能是不准确的。

标签: performance csv time julia benchmarking


【解决方案1】:

您正在与运行时一起测量编译。

测量时间的一种正确方法是:

@time CSV.read(file, DataFrame)
@time CSV.read(file, DataFrame)

在第一次运行时,该函数在第二次运行时编译,您可以使用它。

另一种选择是使用BenchmarkTools

using BenchmarkTools
@btime CSV.read(file, DataFrame)

通常,人们使用 Julia 来处理庞大的数据集,因此单个初始编译时间并不重要。但是,可以将 CSV 和 DataFrame 编译到 Julia 的系统映像中,并且从第一次运行开始就可以快速执行,有关指令请参见此处:Why julia takes long time to import a package?(但通常不需要它更高级)

您还有另一个选择是降低编译器的优化级别(这适用于您的工作量很小且经常重新启动并且您不希望映像构建带来的所有复杂性的情况。在这个笼子里,您可以运行 Julia:

julia --optimize=0 my_code.jl

最后,就像@Oscar Smith 在即将发布的 Julia 1.6 中提到的那样,编译时间会稍微短一些。

【讨论】:

  • 我大多不同意这个答案。对于数据分析工作流程,这个编译时间很重要。我认为更好的答案是展示 1.6 以及它如何减少所花费的时间
  • 你可以编译成系统镜像或者设置优化级别(刚刚更新完anwser)。是的,1.6 很棒!
  • 如果这是一个具有许多短生命周期的大型生产集群,我会构建一个自定义 Julia 系统映像(如果无法重新设计参数扫描以使进程保持活动状态)大约 15 分钟)。
  • 更新:我使用 PackageCompiler 包来创建 sysimage,它可以工作,但不幸的是,它对使用 PyCall 的函数没有多大作用,但是它将纯 julia 代码的加载时间提高了 50%。跨度>
猜你喜欢
  • 2017-02-15
  • 2011-06-18
  • 2017-03-26
  • 1970-01-01
  • 2015-08-07
  • 2020-01-23
  • 1970-01-01
  • 2021-05-05
  • 2013-11-13
相关资源
最近更新 更多