除了特定列Spark 1.6

Ref*_*etz 2 dataframe apache-spark apache-spark-sql

我正在尝试使用dfB过滤掉dfA中的行。

dfA:

+----+---+----+------------+-----+
|year|cid|X|        Y|Z|
+----+---+----+------------+-----+
+----+---+----+------------+-----+.
Run Code Online (Sandbox Code Playgroud)

dfB:

+----+---+
|year|cid|
+----+---+
+----+---+
Run Code Online (Sandbox Code Playgroud)

我的目标是year cid从dfA中填补dfB中的所有夫妻。

我认为这是明确的例外:

dfA.except(dfB)
Run Code Online (Sandbox Code Playgroud)

但是我需要两个DF中的列数相同。有没有一种方法可以对特定列执行除操作以外的操作?还是应该完全走另一条路。

Rap*_*oth 5

不,我认为不适用于except。您需要的是左反联合:

dfA.join(dfB,Seq("year","cid"),"leftanti")
Run Code Online (Sandbox Code Playgroud)

在火花2之前,这应该做同样的事情

dfA.join(dfB.withColumn("b",lit(1)),Seq("year","cid"),"left")
  .where($"b".isNull).drop($"b")
Run Code Online (Sandbox Code Playgroud)