这个问题在这里已经有答案了:
基于指定denylist条件的另一个Dataframe筛选sparkDataframe(2个答案)
四年前关门了。
我觉得答案很简单。给定两个Dataframe,我想过滤第一个Dataframe,其中一列中的值不在另一个Dataframe的列中。
我不想求助于完整的sparksql,所以只需要使用dataframe.filter、column.contains、isin关键字或join方法。
val df1 = Seq(("Hampstead", "London"),
("Spui", "Amsterdam"),
("Chittagong", "Chennai")).toDF("location", "city")
val df2 = Seq(("London"),("Amsterdam"), ("New York")).toDF("cities")
val res = df1.filter(df2("cities").contains("city") === false)
// doesn't work, nor do the 20 other variants I have tried
有人有什么想法吗?
2条答案
按热度按时间23c0lvtd1#
我发现我可以用一个更简单的方法来解决这个问题——似乎反连接可以作为连接方法的参数,但是spark scaladoc没有描述它:
结果:
p、 谢谢你给我的复本的指针-正确地标记为这样
g6ll5ycj2#
如果您试图筛选
DataFrame
使用另一个,你应该使用join
(或其任何变体)。如果您需要的是使用List
或者任何适合您的主服务器和工作服务器的数据结构,您可以广播它,然后在filter
或者where
方法。例如,我会这样做: