【发布时间】:2021-11-05 03:59:51
【问题描述】:
我有 2 个数据集。 First 有许多行具有唯一键
ds1
key val1 val2
1 a 1
2 a 2
3 b 3
4 c 3
在第二个相同的键可以遇到很多次。
ds2
key val1 val2
1 x x
1 x g
2 u h
5 i j
我需要加入它们,但是内部的逻辑对于简单的加入来说太复杂了,所以我决定使用 cogroup 并迭代数据。
val ds1 = df1.as[ds1].groupByKey(_.key)
val ds2 = df2.as[ds2].groupByKey(_.key)
ds2.cogroup(ds1)(
(k:String, ds2:Iterator[ds2], ds1:Iterator[ds1]) => {
//some logic
}
)
问题是我实际上不需要对 ds1 进行分组,因为我知道它拥有唯一的键,但 cogroup 不会过度接受 ds。我知道 RDD 类中有 fullOuterJoin,但据我所知,它的性能更差。
val rdd1 = df1.as[ds1].rdd.map(x => (x.key, x))
val rdd2 = df2.as[ds2].rdd.groupBy(_.key)
rdd2.fullOuterJoin(rdd1)
它真的会影响性能吗?如果可以,有什么替代方案?
我使用的是 spark 2.2。
【问题讨论】:
标签: scala apache-spark dataset