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

时间:2017-02-22 05:58:09

标签: scala apache-spark spark-dataframe pyspark-sql

假设我有两个数据框, df1 df2 df1 df2 都包含“id”列。我想过滤 df1 ,以便生成的df, df1prime 具有

  • 仅在 df1
  • 中找到的ID
  • df2
  • 中找不到所有ID

不使用任何联接。我怎样才能做到这一点?回到RDD而不是DF会有帮助吗? pyspark和scala的回应都受到欢迎。

谢谢!

编辑:我想保留df1

中的所有行

1 个答案:

答案 0 :(得分:0)

如果您真的只想要df1prime中的ID(正如您在问题中所述),那么您可以简单地执行(scala):

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

如果您需要df1的所有列,没有加入,我就看不到任何其他选项(我的上面的行并假设id类型为long):

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

但通常收藏不是一种选择......