DistributedArrays.jl icon indicating copy to clipboard operation
DistributedArrays.jl copied to clipboard

ddata doesn't work as intended when length(data) = length(pids)

Open SelimChraibi opened this issue 3 years ago • 0 comments

The documentation says the following about ddata:

The function ddata(;T::Type=Any, init::Function=I->nothing, pids=workers(), data::Vector=[]) can be used to created a distributed vector whose localparts need not be Arrays. ... Argument data if supplied is distributed over the pidslength(data) must be a multiple of length(pids). If the multiple is 1, returns a DArray{T,1,T} where T is eltype(data). If the multiple is greater than 1, returns a DArray{T,1,Array{T,1}}, i.e., it is equivalent to calling distribute(data).

The case when "the multiple is 1" is giving me trouble:

julia> using Distributed; addprocs(2)
julia> using DistributedArrays

julia> ddata(data=["foo", "bar"])

2-element DArray{String, 1, String}:
ERROR: TypeError: in typeassert, expected String, got a value of type Char
...
julia> ddata() 

ERROR: On worker 2:
MethodError: no method matching getindex(::Nothing, ::Int64)
...

Note that ddata works as intended for multiples greater than 1:

julia> ddata(data=["foo", "bar", "foo", "bar"]) 

4-element DArray{String, 1, Vector{String}}:
 "foo"
 "bar"
 "foo"
 "bar"
julia> ddata(;T=Any, init=I->nothing, pids=workers(), data=[nothing, nothing, nothing, nothing])

4-element DArray{Nothing, 1, Vector{Nothing}}:
 nothing
 nothing
 nothing
 nothing

First time posting an issue, hope I'm doing things right!

SelimChraibi avatar Oct 29 '22 21:10 SelimChraibi