zip和zippartition总结

最近在搞spark机器学习项目时,碰到了一些小问题。两个数据集要联到一起。比如rdd1=("abc","cde","dfc"),rdd2=(1,2,3)要连接成

rdd3=(("abc",1),("cde",2),("dfc",3)),当然,小数据集的时候用zip就可以了。大数据集的时候就有问题了。每个partiton的数据条数不一致。报错。

尝试着用别的方法解决问题。把他们全部map成1->“abc"这种类型

如i=0;

rdd1.map(line=>

i=i+1;

(i.toString,line)

)

然后再把他们做连接。这下该好了吧。reduce一看,傻眼了。spark它是分布式的。每台机器一个1,机器一的i 从1-20000,机器2的i也是从1-20000.这样就用很多id重复了。

得再想个办法。

zip不是报错嘛,zippatition怎么样?

发现也不太好使。

最后,把rdd1.repartition(1),rdd2.repatition(1).rdd1.zip(rdd2).

问题解决。就是把两个rdd全部重新分区,分到一个区里。

不过这个还是数据集不是很大。如果很大的话,分不到一个区里。就会有问题了。

还是要多琢磨。

原文地址:https://www.cnblogs.com/whu-zeng/p/5147693.html