1

对于我们的 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)))

由于事实数据中有一个 item2000 在 itemMap 的项目主数据中找不到,我们需要自动创建 (item2000,2000) 的映射并将其添加到 itemMap 以便将来我们再次找到 item2000 时可以使用相同的项目键。

如何实现使用并发收集?对于实际数据的每行循环,如果找不到item key则自动创建,所以我们需要一种锁定itemMap的方法,否则可能会有多个thead试图将autocreate数据插入itemMap

4

0 回答 0