如何在 pyspark 中使用“不存在的地方”SQL 条件?

use*_*920 3 python hive apache-spark-sql pyspark airflow

我在 Hive 上有一个表,我正在尝试在该表中插入数据。
我正在从 SQL 获取数据,但我不想插入 Hive 表中已存在的 id。我正在尝试使用与不存在的情况相同的条件。我在 Airflow 上使用PySpark

Ste*_*ven 8

existsSpark 中不存在该运算符,但有 2 个连接运算符可以替代它:left_antileft_semi

例如,如果您想df在配置单元表中插入数据帧target,您可以执行以下操作:

new_df = df.join(
    spark.table("target"),
    how='left_anti',
    on='id'
)
Run Code Online (Sandbox Code Playgroud)

然后你new_df在你的表中写下。

left_anti允许您仅保留不满足连接条件的行(相当于not exists)。相当于.existsleft_semi

  • 当然,您可以首先将“spark.table()”分配给变量 df2,但如果您只在一个地方使用数据帧,则没有必要。 (2认同)