如何为每个记录生成唯一的ID火花

问题描述:

我有一个巨大的MM +记录数据集,我试图给每个记录分配唯一的ID。我尝试了下面的代码,但由于行ID是连续的,所以需要很多时间。我已经尝试调整内存参数来优化作业,无法获得太多的性能。如何为每个记录生成唯一的ID火花

示例代码段:

JavaRDD<String> rawRdd=...... 
rawRdd.zipWithIndex() 
.mapToPair(t->new Tuple2<Long,String>(t._2,t._1)) 

是否有分配唯一的ID什么更好的办法?感谢

方法1:,如果你的要求是只分配唯一的ID,你可以使用UUID作为唯一的行ID:

rawRdd.mapToPair(t->new Tuple2<String,String>(t,UUID.randomUUID().toString())); 

唯一的缺点就是该ID的长度为36个字节。

方法2:创建一个集中系统来分配唯一的ID。我使用基于REST的API,它遵循一种模式来生成id,每个映射操作调用REST服务来获得唯一的id。

第二种方法可以完全控制设计id的模式。

+0

谢谢,你可以请添加更多关于方法2的细节? –

+1

按照[休息示例](https://www.mkyong.com/spring-mvc/spring-3-rest-hello-world-example/)使用REST创建集中ID并从spark中调用它为每个ID分配id记录。 –