最近在搞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全部重新分区,分到一个区里。
不过这个还是数据集不是很大。如果很大的话,分不到一个区里。就会有问题了。
还是要多琢磨。