ETL の場合、ファクト データには item_key はありませんが、item_number はあります。ロード中に、item_number の item_key が見つかった場合はそれを使用し、見つからない場合は item_key を自動作成します。現在、プロセスは並列ではありません。scala には並行コレクションが組み込まれているため、scala を使用して並列に実行することを考えています。
簡単な例を使用します。
val keys=1 to 1000
val items=keys map {num=>"Item"+num}
var itemMap=(items zip keys).toMap
そして今、アイテム番号が次の数百万行をロードする必要があります。
def g(v:String)=List.fill(5000)(v)
var fact="Item2000" :: List(items.flatMap(x=>g(x)))
ファクト データには、itemMap のアイテム マスター データでは見つからないアイテム item2000 があるため、(item2000,2000) のマップを自動作成し、それを itemMap に追加して、将来 item2000 が再び見つかった場合に使用できるようにする必要があります。同じアイテムキー。
同時収集を使用して実装する方法は? 実際のデータの行のループごとに、項目キーが見つからない場合は自動作成されるため、itemMap をロックする方法が必要です。そうしないと、自動作成データを itemMap に挿入しようとする複数のスレッドが存在する可能性があります。