也许我完全误解了这一点,但基本上有2个dfs,我不想得到df1中所有不在df2中的行,我想这就是左反联接的作用,pyspark v1.6显然不支持左反联接
df1:
+----+---+
| id | x |
+----+---+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | d |
+----+---+
df2:
+----+---+
| id | x |
+----+---+
| 1 | a |
| 2 | b |
+----+---+
desired output df3:
+----+---+
| id | x |
+----+---+
| 3 | c |
| 4 | d |
+----+---+
我正在努力:
df3 = df1.where(~col("id").isin(df2["id"]))
这给了我0行的.count()
以及:
df3 = df1.join(df2, on = ["id"], how = "leftanti")
为此,我得到以下异常:
IllegalArgumentException: u"Unsupported join type 'leftanti'. Supported join types include: 'inner', 'outer', 'full', 'fullouter', 'leftouter', 'left', 'rightouter', 'right', 'leftsemi'."
谢谢你的帮助
我们可以模拟
leftanti
与left join
连接,并且只从df2
中的id中过滤空列Example:
从Spark2.4+开始,我们可以在这种情况下使用^{} 函数:
我很喜欢Spark 1.6的@Shu(不幸的是,它仍然在许多遗留系统中使用)的答案,如果有人需要的话,我将其推广到以后使用:
在最近的Spark版本中,同样的行为也可以通过
df1.join(df2, on=key, how="left_anti")
相关问题 更多 >
编程相关推荐