我在这里读了很多Q& A但仍无法找到我的问题的答案。
我的问题是,即使里面有重复的值,我能找到两个数据集的交叉吗?
下面的代码显示,如果重复值,数据集t5将无法显示其额外元素' 2'关于数据集t2。
例如,我想获得类似t5 - t2 =(1,2)的东西。 但是,我只能通过以下代码获得t5 - t2 =(1):
val t1 = Seq(1, 2, 3).toDS()
val t2 = Seq(2, 3).toDS()
val t3 = Seq(3, 4).toDS()
val t4 = Seq(4, 5 ).toDS()
val t5 = Seq(1, 2, 2, 3).toDS()
val t6 = Seq(2, 2, 3).toDS()
t1.intersect(t2).show()
> 2 3
t1.intersect(t3).show()
> 3
t1.intersect(t4).show()
> null
t1.union(t2).except(t1.intersect(t2))
> 1
t5.intersect(t2).show()
> 2 3
t5.intersect(t6).show()
> 2 3
t5.except(t2).show()
>1
t5.except(t6).show()
>1
t5.union(t2).except(t5.intersect(t2))
>1
t5.union(t6).except(t5.intersect(t6))
>1
t5.join(t2, t5("value") === t2("value"), "leftanti").show()
>1
答案 0 :(得分:0)
我所拥有的解决方案可能不是最佳解决方案,可以提供更好的解决方案。
因此,我们可以在这种情况下使用连接。
t5.join(t2, t5("value") === t2("value")).drop(t2("value")).show()
//result
+-----+
|value|
+-----+
| 2|
| 2|
| 3|
+-----+
由于