在 Julia 中更快地读取 CSV 文件

Read CSV files faster in Julia

我注意到使用 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 快,为什么这个操作要花这么多时间?此外,有没有更快的替代方法来减少编译时间?

您正在测量编译和 运行时间。

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

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

第一个 运行 函数编译第二个 运行 你可以使用它。

另一种选择是使用 BenchmarkTools:

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

通常情况下,人们使用 Julia 来处理庞大的数据集,因此单一的初始编译时间并不重要。但是,可以将 CSV 和 DataFrame 编译到 Julia 的系统映像中,并从第一个 运行 开始快速执行,有关指令,请参见此处:(然而,这更高级,通常不需要它)

您还有另一种选择,即降低编译器的优化级别(这适用于您的工作负载较小且频繁重启并且您不希望图像构建带来的所有复杂性的场景。在这个笼子里你会 运行 Julia 为:

julia --optimize=0 my_code.jl

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