Spark:如何找出两个数据集之间的差异元素?

时间:2017-10-13 03:13:28

标签: scala apache-spark apache-spark-dataset

我在这里读了很多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

1 个答案:

答案 0 :(得分:0)

我所拥有的解决方案可能不是最佳解决方案,可以提供更好的解决方案。

因此,我们可以在这种情况下使用连接。

t5.join(t2, t5("value") === t2("value")).drop(t2("value")).show()

//result
+-----+
|value|
+-----+
|    2|
|    2|
|    3|
+-----+

由于