# How to distribute array by column?

**URL:** <https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091>\
**Category:** Julia at Scale\
**Tags:** question, package\
**Created:** [May 10, 2019, 8:59pm UTC](https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091 "2019-05-10T20:59:04Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Carol](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carol/32/8140_2.png) [@Carol](https://discourse.julialang.org/u/Carol)\
**Post date:** [May 10, 2019, 8:59pm UTC](https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091/1 "2019-05-10T20:59:04Z")

</div>

Background:

```julia
using Distributed
@everywhere using DistributedArrays
addprocs(4)

A=[1 1 2 2; 
   1 1 2 2; 
   3 3 4 4;
   3 3 4 4]
adist = distribute(A)

```

I found A is distributed in a checkerboard block way, which means

```julia
fetch( @spawnat 2 localpart(adist))

```

will return

```julia
[1 1;
 1,1]

```

But I want A to be distributed by column, which means

```julia
fetch( @spawnat 2 localpart(adist))

```

will return

```julia
[1,
 1,
 3,
 3]

```

How can I define the way of distribution? (eg. only by column)

Thanks,

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [May 10, 2019, 9:48pm UTC](https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091/2 "2019-05-10T21:48:14Z")

</div>

You can just specify it with the `dist` keyword argument to specify the number of partitions per dimension:

```julia
julia> adist = distribute(A; dist=(1, nworkers()))
4×4 DArray{Int64,2,Array{Int64,2}}:
 1 1 2 2
 1 1 2 2
 3 3 4 4
 3 3 4 4

julia> fetch( @spawnat 2 localpart(adist))
4×1 Array{Int64,2}:
 1
 1
 3
 3

```

(As an aside, note that you want to `@everywhere using` _after_ `addprocs`ing)

---

<div class="post-metadata">

**Author:** ![Carol](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carol/32/8140_2.png) [@Carol](https://discourse.julialang.org/u/Carol)\
**Post date:** [May 10, 2019, 10:17pm UTC](https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091/3 "2019-05-10T22:17:44Z")

</div>

I tested that

```julia
adist2 = distribute(A; dist=(4, 1)) #by row
adist3 = distribute(A; dist=(1, 4)) #by column
adist4 = distribute(A; dist=(2, 2)) #checkerboard

```

The documentation said “dist optionally specifies a vector or tuple of the number of partitions in each dimension”.

But I still feel confused about the two parameters in dist(parameter1, parameter2)

Could you please explain with more detail? Thanks for your time.

---

<div class="post-metadata">

**Author:** ![mbauman](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbauman/32/31082_2.png) [@mbauman](https://discourse.julialang.org/u/mbauman)\
**Post date:** [May 10, 2019, 10:22pm UTC](https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091/4 "2019-05-10T22:22:32Z")

</div>

The `dist` tuple has as many elements as there are dimensions in `A`. It specifies how many partitions (or splits) should be used within each dimension.

The first dimension is rows — and there we don’t want any partitions, so we use a `1`.

The second dimension is the columns — and there we want as many partitions as there are workers.

---

<div class="post-metadata">

**Author:** ![Carol](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/carol/32/8140_2.png) [@Carol](https://discourse.julialang.org/u/Carol)\
**Post date:** [May 10, 2019, 10:23pm UTC](https://discourse.julialang.org/t/how-to-distribute-array-by-column/24091/5 "2019-05-10T22:23:46Z")

</div>

I got it. Thank you very much!
