Spark:如何在不使用任何连接的情况下过滤行?

问题描述:

假设我有两个数据帧,df1df2df1df2包含“id”列。我想筛选DF1,使得产生的DF,df1prime,有Spark:如何在不使用任何连接的情况下过滤行?

  • 只在DF1
  • 没有在DF2找到的所有IDS发现的IDS,

不使用任何连接。我怎样才能做到这一点?回到RDDs而不是DFs会有帮助吗?欢迎pyspark和scala回应。

谢谢!

编辑:我想从DF1

+0

连接有什么问题?看到[这里](http://*.com/questions/42351669/how-to-filter-duplicate-records-having-multiple-key-in-spark-dataframe/) – mtoto

+0

连接没有什么特别的错误,但我会喜欢寻找一个更廉价的操作 – tohweizhong

+0

如果你有数据框,反连接将是最便宜的操作,如果你想使用'rdd'你可以使用'cougroup()'然后过滤。 – mtoto

保持整个行。如果你真的只需要在你的df1prime(如你在你的问题状态),那么你可以简单地做(斯卡拉)的ID:

val df1primeIDs = df1.select($"id").except(df2.select($"id")) 

如果需要的df1整列,如果没有加入,我没有看到比任何其他选项(伴我行以上,并假设id的类型为long):

val df1prime = df1.where($"id".isin(
    df1primeIDs.collect().map(_.getLong(0)):_*) 
) 

但通常收集不是一个选项...

+0

啊我想仍然拥有df1中的所有列。收集将是非常昂贵的.. – tohweizhong