我有两个数据帧DF1和DF2。我的任务是选择存在的数据仅在DF1中但在DF2中不存在。可以任意1请帮助。 我正在使用Spark 1.6 shell。
答案 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是要加入的列。