Scala Spark数据帧联接-仅选择第一个数据帧中存在的数据

Scala Spark数据帧联接-仅选择第一个数据帧中存在的数据,scala,spark-dataframe,Scala,Spark Dataframe,我有两个数据帧DF1和DF2。我的任务是选择只存在于DF1中但不存在于DF2中的数据。有谁能帮忙吗。 我用的是Spark 1.6外壳 怎么样。。dataframe1.asd1.joindataframe2.asd2,$d1.col1===$d2.col1。选择$d1.*其中col1是要连接的列。您可以使用此选项: val dfResult = df1.except(df2) 请注意,这两个数据帧需要具有相同的结构和相同的列 在Spark 2.0中,您可以执行反连接。假设您的记录由公共列id标识

我有两个数据帧DF1和DF2。我的任务是选择只存在于DF1中但不存在于DF2中的数据。有谁能帮忙吗。 我用的是Spark 1.6外壳

怎么样。。dataframe1.asd1.joindataframe2.asd2,$d1.col1===$d2.col1。选择$d1.*其中col1是要连接的列。

您可以使用此选项:

val dfResult = df1.except(df2)
请注意,这两个数据帧需要具有相同的结构和相同的列

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


Spark提供了几种连接类型,其中可以使用leftsemi,这类似于内部连接差异,leftsemi连接返回左侧数据集中的所有列,并忽略右侧数据集中的所有列

您可以在Scala中尝试以下类似的方法来转换类型

对于Python,请在下面使用leftsemi的数据帧示例中使用

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

或者,您也可以使用left_semi

这不会给我来自Df1的数据与来自DF2的数据匹配吗??我在寻找DF1中的数据,而DF2中没有。这是一个非常酷的特性。不幸的是,我正在Spark 1.6 shell中寻找解决方案。
empDF.join(deptDF,empDF("emp_dept_id") ===  deptDF("dept_id"),"leftsemi")
    .show(false)
empDF.join(deptDF,empDF.emp_dept_id ==  deptDF.dept_id,"leftsemi") \
   .show(truncate=False)