2017-09-13 7 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を割り当てることである場合は、一意の行IDとしてUUIDを使用することができる:

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

のみ欠点IDの長さは36バイトであることです。

アプローチ2:一意のIDを割り当てるための集中システムを作成します。私はIDを生成するパターンに従うRESTベースのAPIを使用し、各マップ操作は一意のIDを取得するためにRESTサービスを呼び出します。

2番目のアプローチでは、idのパターンを完全に制御できます。

+0

ありがとうございます。アプローチ2の詳細を追加してください。 –

+1

[rest example](https://www.mkyong.com/spring-mvc/spring-3-rest-hello-world-example/)に従って、RESTを使用して集中IDを作成し、それをsparkから呼び出してidをそれぞれに割り当てます記録。 –