请参阅以下数据框
我希望在匹配两个数据帧的col1后,在col2中得到不匹配的行 我正在尝试关注,但它没有产生结果,因为似乎Dataframe连接正在形成笛卡儿
val dfs = Seq((1,1),(1,2),(1,3),(2,6)).toDF("col1","col2")
val dft = Seq((1,1),(1,2),(1,4)).toDF("col1","col2")
dfs.join(dft,"col1").filter(dfs("col2").notEqual(dft("col2"))).show
在上述情况下,我希望加入&过滤返回结果(1,3) 但似乎它将dfs中col1的每一行连接到dft上col1中的每一行,从而产生不需要的结果
Cartesion是否遵循Dataframe加入的正常行为,或者我错过了某些设置?我怎样才能得到(1,3)作为输出?
scala> dft.join(dfs,dft("col1")===dfs("col1")).show
+----+----+----+----+
|col1|col2|col1|col2|
+----+----+----+----+
| 1| 1| 1| 3|
| 1| 1| 1| 2|
| 1| 1| 1| 1|
| 1| 2| 1| 3|
| 1| 2| 1| 2|
| 1| 2| 1| 1|
| 1| 4| 1| 3|
| 1| 4| 1| 2|
| 1| 4| 1| 1|
+----+----+----+----+
由于 chetab
答案 0 :(得分:1)
这不是笛卡尔积。您按col1
加入,因此输出包含匹配col1
的行的所有组合。结果是正确的。