arrow-julia
arrow-julia copied to clipboard
VersionNumber issues when you also have `missing`
julia> using Arrow # v1.6.2
julia> table = (; col = [(; v=v"1"), (; v=v"2"), missing])
(col = Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}[(v = v"1.0.0",), (v = v"2.0.0",), missing],)
julia> Arrow.Table(Arrow.tobuffer(table))
ERROR: MethodError: no method matching zero(::Type{VersionNumber})
Closest candidates are:
zero(::Union{Type{P}, P}) where P<:Dates.Period at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Dates/src/periods.jl:53
zero(::CartesianIndex{N}) where N at multidimensional.jl:106
zero(::SparseArrays.AbstractSparseArray) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/SparseArrays/src/SparseArrays.jl:55
...
Stacktrace:
[1] default(T::Type)
@ ArrowTypes ~/.julia/packages/ArrowTypes/dkiHE/src/ArrowTypes.jl:305
[2] getindex
@ ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/struct.jl:80 [inlined]
[3] getindex
@ ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/struct.jl:79 [inlined]
[4] ArrowTypes.ToArrow(x::Arrow.ToStruct{Tuple{Vararg{Union{UInt64, String}, N} where N}, 4, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}})
@ ArrowTypes ~/.julia/packages/ArrowTypes/dkiHE/src/ArrowTypes.jl:348
[5] arrowvector(x::Arrow.ToStruct{Tuple{Vararg{Union{UInt64, String}, N} where N}, 4, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Nothing; dictencoding::Bool, dictencode::Bool, maxdepth::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, NTuple{4, Symbol}, NamedTuple{(:compression, :largelists, :denseunions, :dictencodenested), Tuple{Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/arraytypes.jl:61
[6] (::Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}})(j::Int64)
@ Arrow ./none:0
[7] iterate
@ ./generator.jl:47 [inlined]
[8] collect_to!(dest::Vector{Arrow.Primitive{UInt32, A} where A}, itr::Base.Generator{UnitRange{Int64}, Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}}}, offs::Int64, st::Int64)
@ Base ./array.jl:724
[9] collect_to!(dest::Vector{Arrow.Primitive{UInt32, Arrow.ToStruct{UInt32, 1, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}}}}, itr::Base.Generator{UnitRange{Int64}, Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}}}, offs::Int64, st::Int64)
@ Base ./array.jl:732
[10] collect_to_with_first!(dest::Vector{Arrow.Primitive{UInt32, Arrow.ToStruct{UInt32, 1, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}}}}, v1::Arrow.Primitive{UInt32, Arrow.ToStruct{UInt32, 1, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}}}, itr::Base.Generator{UnitRange{Int64}, Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}}}, st::Int64)
@ Base ./array.jl:702
[11] collect(itr::Base.Generator{UnitRange{Int64}, Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}}})
@ Base ./array.jl:683
[12] _totuple
@ ./tuple.jl:331 [inlined]
[13] Tuple
@ ./tuple.jl:303 [inlined]
[14] arrowvector(::ArrowTypes.StructKind, x::Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Dict{String, String}; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/struct.jl:93
[15] arrowvector(::Type{VersionNumber}, x::Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Dict{String, String}; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/arraytypes.jl:85
[16] arrowvector(x::Arrow.ToStruct{VersionNumber, 1, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Nothing; dictencoding::Bool, dictencode::Bool, maxdepth::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, NTuple{4, Symbol}, NamedTuple{(:compression, :largelists, :denseunions, :dictencodenested), Tuple{Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/arraytypes.jl:69
[17] (::Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}})(j::Int64)
@ Arrow ./none:0
[18] iterate
@ ./generator.jl:47 [inlined]
[19] collect(itr::Base.Generator{UnitRange{Int64}, Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}}})
@ Base ./array.jl:678
[20] _totuple
@ ./tuple.jl:331 [inlined]
[21] Tuple(itr::Base.Generator{UnitRange{Int64}, Arrow.var"#39#40"{Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}}, Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, Int64, Int64, Dict{Int64, Any}, Vector{Arrow.DictEncoding}}})
@ Base ./tuple.jl:303
[22] arrowvector(::ArrowTypes.StructKind, x::Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Nothing; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/struct.jl:93
[23] arrowvector(::Type{NamedTuple{(:v,), Tuple{VersionNumber}}}, x::Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Nothing; kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Integer}, NTuple{6, Symbol}, NamedTuple{(:dictencode, :maxdepth, :compression, :largelists, :denseunions, :dictencodenested), Tuple{Bool, Int64, Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/arraytypes.jl:85
[24] arrowvector(x::Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, i::Int64, nl::Int64, fi::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Nothing; dictencoding::Bool, dictencode::Bool, maxdepth::Int64, kw::Base.Iterators.Pairs{Symbol, Union{Nothing, Bool}, NTuple{4, Symbol}, NamedTuple{(:compression, :largelists, :denseunions, :dictencodenested), Tuple{Nothing, Bool, Bool, Bool}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/arraytypes.jl:69
[25] toarrowvector(x::Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, i::Int64, de::Dict{Int64, Any}, ded::Vector{Arrow.DictEncoding}, meta::Nothing; compression::Nothing, kw::Base.Iterators.Pairs{Symbol, Integer, NTuple{5, Symbol}, NamedTuple{(:largelists, :denseunions, :dictencode, :dictencodenested, :maxdepth), Tuple{Bool, Bool, Bool, Bool, Int64}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/arraytypes/arraytypes.jl:36
[26] (::Arrow.var"#111#112"{Dict{Int64, Any}, Bool, Nothing, Bool, Bool, Bool, Int64, Vector{Arrow.DictEncoding}, Vector{Type}, Vector{Any}})(col::Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}, i::Int64, nm::Symbol)
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/write.jl:246
[27] eachcolumn
@ ~/.julia/packages/Tables/i6z2B/src/utils.jl:70 [inlined]
[28] toarrowtable(cols::NamedTuple{(:col,), Tuple{Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}}, dictencodings::Dict{Int64, Any}, largelists::Bool, compress::Nothing, denseunions::Bool, dictencode::Bool, dictencodenested::Bool, maxdepth::Int64)
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/write.jl:245
[29] macro expansion
@ ~/.julia/packages/Arrow/PQ5Mm/src/write.jl:140 [inlined]
[30] macro expansion
@ ./task.jl:387 [inlined]
[31] write(io::IOBuffer, source::NamedTuple{(:col,), Tuple{Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}}, writetofile::Bool, largelists::Bool, compress::Nothing, denseunions::Bool, dictencode::Bool, dictencodenested::Bool, alignment::Int64, maxdepth::Int64, ntasks::Float64)
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/write.jl:132
[32] #write#100
@ ~/.julia/packages/Arrow/PQ5Mm/src/write.jl:95 [inlined]
[33] write
@ ~/.julia/packages/Arrow/PQ5Mm/src/write.jl:95 [inlined]
[34] #tobuffer#3
@ ~/.julia/packages/Arrow/PQ5Mm/src/utils.jl:206 [inlined]
[35] tobuffer(data::NamedTuple{(:col,), Tuple{Vector{Union{Missing, NamedTuple{(:v,), Tuple{VersionNumber}}}}}})
@ Arrow ~/.julia/packages/Arrow/PQ5Mm/src/utils.jl:205
[36] top-level scope
@ REPL[40]:1
My workaround:
ArrowTypes.default(::Type{VersionNumber}) = v"0"
(Ref #200, #205 for a different issue that was fixed, namely the case if you don't have missing).