【问题标题】:limit size JLD2 Julia限制大小 JLD2 朱莉娅
【发布时间】:2023-03-30 15:43:01
【问题描述】:

在 Julia 中使用 JLD2 加载数据是否有大小限制?

相同的代码:

using JLD2
using FileIO
exp=load("myfile.jld2");

在数据达到一定大小之前似乎可以正常工作。对于我运行的一些实验,文件为 5GB,我获得以下内容:

加载“/pathtofile/myfile.jld2”时遇到错误。 致命错误:

错误:EOFError:读取文件结尾

堆栈跟踪:

[1] handle_error(::EOFError, ::File{DataFormat{:JLD2}}) 在/path/.julia/packages/FileIO/Y0Lre/src/error_handling.jl:80

[2] handle_exceptions(::Array{Any,1}, ::String) at /path/.julia/packages/FileIO/Y0Lre/src/error_handling.jl:75

[3] #load#27(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::File{ DataFormat{:JLD2}}) 在 /path/.julia/packages/FileIO/Y0Lre/src/loadsave.jl:193

[4] 在 /path/.julia/packages/FileIO/Y0Lre/src/loadsave.jl:172 处加载(::File{DataFormat{:JLD2}})

[5] #load#13(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::String)在 /path/.julia/packages/FileIO/Y0Lre/src/loadsave.jl:118

[6] 在 /path/.julia/packages/FileIO/Y0Lre/src/loadsave.jl:118 处加载(::String)

[7] 无顶级范围:0

我尝试使用完全没有使用经验的 jldopen,但我也收到类似的错误消息。

我能做什么?

顺便说一句,load 和 jldopen("my file.jld2","r") 有什么区别?

我在 Mac OSHighSierra 10.13.6 上使用 Julia 版本 1.0.2。

【问题讨论】:

  • 请注意,JLD2 有很好的(有时更稳定的)替代方案。对于短期序列化,请查看标准库 docs.julialang.org/en/v1.0/stdlib/Serialization,对于长期序列化 github.com/MikeInnes/BSON.jl 可能更合适。
  • 谢谢!很有用
  • 很高兴为您提供帮助。请注意,在 Stackoverflow 上,当您发现其他人的答案有用而不是编写答案时,您单击“向上”箭头。

标签: julia


【解决方案1】:

我经常阅读 >5GB 的文件,没有问题。所以我认为,由于某种原因,您的文件没有正确写入。错误消息也表明了这一点。

要回答您的另一个问题,load("myfile.jld2")jldopen("myfile.jld2", "r") 之间的区别在于前者将文件的所有内容加载到字典中,而后者打开文件并返回您可以使用的 JLDFile 对象获得对您的数据文件的细粒度访问。例如,它允许您将多个数据字段写入同一个文件(注意多个save 命令会覆盖同一个文件)。

演示

julia> using FileIO, JLD2

julia> jldopen("myfile.jld2", "w") do f
           write(f, "x", rand(10))
           write(f, "y", "test")
       end

julia> load("myfile.jld2")
Dict{String,Any} with 2 entries:
  "x" => [0.918336, 0.608631, 0.757459, 0.935133, 0.548579, 0.909, 0.913573, 0.0278975, 0.…

  "y" => "test"

julia> load("myfile.jld2", "y")
"test"

julia> f = jldopen("myfile.jld2", "r")
JLDFile C:\Users\carsten\myfile.jld2 (read-only)
 ├─� x
 └─� y

julia> typeof(f)
JLD2.JLDFile{JLD2.MmapIO}

julia> f["x"]
10-element Array{Float64,1}:
 0.9183355611466055
 0.6086314948624771
 0.757458522055442
 0.9351333595616453
 0.5485794420648191
 0.9089998574850378
 0.9135729509843764
 0.027897482037234633
 0.5827560900500541
 0.9831034815173016

julia> close(f)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 2014-02-04
    • 2014-12-31
    相关资源
    最近更新 更多