如何为每个Spark记录生成唯一标识符

3

我有一个包含数百万行记录的庞大数据集,现在我想为每个记录分配一个唯一的ID。我尝试了下面的代码,但由于行ID是顺序的,所以它需要很长时间。我尝试调整内存参数来优化任务,但成效不大。

示例代码:

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

有没有更好的方式来分配唯一的ID?谢谢

1个回答

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的模式。

谢谢,您能否添加有关第二种方法的更多细节? - rashmi mardur
1
按照rest example的示例创建一个使用REST的中心化ID,并从Spark中调用它以为每个记录分配ID。 - Rahul Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接