2017-09-13 83 views
1

我有一個巨大的MM +記錄數據集,我試圖給每個記錄分配唯一的ID。我嘗試了下面的代碼,但由於行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的模式。

+0

謝謝,你可以請添加更多關於方法2的細節? –

+1

按照[休息示例](https://www.mkyong.com/spring-mvc/spring-3-rest-hello-world-example/)使用REST創建集中ID並從spark中調用它爲每個ID分配id記錄。 –