如何在pyspark中使用“where not exists”sql条件?

ia2d9nvy  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(582)

我在配置单元上有一个表,我正在尝试在该表中插入数据。
我正在从sql获取数据,但我不想插入已存在于配置单元表中的id。我试着使用相同的条件,比如where not exists。我用的是Pypark的气流。

6yoyoihd

6yoyoihd1#

这个 exists spark中不存在运算符,但有2个联接运算符可以替换它: left_anti 以及 left_semi .
例如,如果要插入Dataframe df 在Hive桌上 target ,您可以执行以下操作:

new_df = df.join(
    spark.table("target"),
    how='left_anti',
    on='id'
)

然后你写 new_df 在你的table上。 left_anti 允许您仅保留不满足连接条件的行(相当于 not exists ). 相当于 existsleft_semi .

r8xiu3jd

r8xiu3jd2#

我认为星火不存在这样的属性。我认为你可以使用两种方法:
解决方法 UNIQUE condition(典型的关系数据库):在尝试插入(in)时使用这种方式 append 模式)一个已经存在的记录,您将得到一个可以正确处理的异常。
读你想写的表格, outer join 它包含要添加到上述表中的数据,然后将结果写入 overwrite mode (但我认为第一种解决方案的性能可能更好)。
更多细节请随时询问

相关问题