Spark Dataframe Joins - 选择仅存在于第一个数据帧中的数据

时间:2017-03-06 17:33:30

标签: scala spark-dataframe

我有两个数据帧DF1和DF2。我的任务是选择存在的数据仅在DF1中但在DF2中不存在。可以任意1请帮助。 我正在使用Spark 1.6 shell。

3 个答案:

答案 0 :(得分:0)

您可以使用:

val dfResult = df1.except(df2)

请注意,两个数据帧需要具有相同的结构(相同的列)

在Spark 2.0中,您可以执行ANTI JOIN。假设您的记录由公共列id标识:

val dfResult = df1.join(df2, Seq("id"), "leftanti")

答案 1 :(得分:0)

Spark提供了几种联接类型,您可以使用其中的 leftsemi ,这类似于内部联接的不同之处在于leftsemi联接返回左侧数据集中的所有列,而忽略右侧数据集中的所有列。 / p>

您可以在Scala中尝试以下类似Join Spark DataFrame using leftsemi join类型的内容。

empDF.join(deptDF,empDF("emp_dept_id") ===  deptDF("dept_id"),"leftsemi")
    .show(false)

对于Python,在PySpark SQL join数据框示例下使用leftsemi

empDF.join(deptDF,empDF.emp_dept_id ==  deptDF.dept_id,"leftsemi") \
   .show(truncate=False)

或者,您也可以使用 left_semi

答案 2 :(得分:-1)

如何... dataframe1.as("d1").join(dataframe2.as("d2"), $"d1.col1" === $"d2.col1").select($"d1.*")其中col1是要加入的列。