Apache spark 在Where条件下使用Subselect触发数据集

Apache spark 在Where条件下使用Subselect触发数据集,apache-spark,apache-spark-dataset,Apache Spark,Apache Spark Dataset,我尝试在Spark SQL中重新创建SQL查询。通常,我会在如下表中插入: INSERT INTO Table_B ( primary_key, value_1, value_2 ) SELECT DISTINCT primary_key, value_1, value_2 FROM Table_A WHERE NOT EXISTS ( SELECT 1 FROM Table_B WHERE Table_B.primary_ke

我尝试在Spark SQL中重新创建SQL查询。通常,我会在如下表中插入:

INSERT INTO Table_B 
( 
    primary_key,
    value_1,
    value_2
) 
SELECT DISTINCT
    primary_key,
    value_1,
    value_2
FROM 
    Table_A
WHERE NOT EXISTS 
(
SELECT 1 FROM 
Table_B
WHERE
Table_B.primary_key = Table_A.primary_key
);
Spark SQL非常简单,我可以从新数据集中的TempView加载数据。不幸的是,我不知道如何重构where子句

Dataset<Row> Table_B = spark.sql("SELECT DISTINCT primary_key, value_1, value_2 FROM Table_A").where("NOT EXISTS ... ???" );
Dataset Table_B=spark.sql(“从表_A中选择不同的主键、值_1、值_2”)。其中(“不存在…”;

SparkSQL当前不存在&IN。“”


始终可以使用“联接”或“左半联接”重写中存在的(&IN)。“”或始终可以使用UNION重写。并且不能使用EXCEPT重写。

SparkSQL当前没有EXISTS&IN。“”


始终可以使用“联接”或“左半联接”重写中存在的(&IN)。“”或始终可以使用UNION重写。和NOT可以使用EXCEPT重写。

TSQL中不存在的查询可以使用带有“where”的左连接重写:

也许,类似的方法也可以用在Spark中,使用左连接。例如,对于数据帧,类似以下内容:

aDF.join(bDF,aDF("primary_key")===bDF("primary_key"),"left_outer").filter(isnull(col("other_b_not_nullable_column")))

TSQL中不存在的查询可以使用带有“where”的左连接重写:

也许,类似的方法也可以用在Spark中,使用左连接。例如,对于数据帧,类似以下内容:

aDF.join(bDF,aDF("primary_key")===bDF("primary_key"),"left_outer").filter(isnull(col("other_b_not_nullable_column")))