Hi Ioannis,
with a flatMap operation which replicates elements and assigning them a proper key followed by a keyBy operation you can practically generate all different kinds of partitionings.
So if you first collect the data in parallel windows, you can then replicate half of the data of each window for each other window (assigning the replicates for each other window a distinct key). Next you group on this key and calculate the cartesian product for each resulting group. This should give you a parallel cartesian product.
Cheers,
Till