Pyspark SQL 哪里不在?

Pyspark SQL WHERE NOT IN?

我正在尝试查找 nodes2 但不在 nodes1 中的所有内容。

spark.sql("""
SELECT COUNT(*) FROM 
    (SELECT * FROM nodes2 WHERE NOT IN  
    (SELECT * FROM nodes1))
""").show()

出现以下错误: "cannot resolve '不是' given input columns: [nodes2.~id, nodes2.~label];

是否可以在 Pyspark 中进行这种集差操作?

用 NOT IN 匹配单列:

你需要用where定义一些列吗?您要为 NOT 运算符匹配哪个?

如果是这样,那么,例如,您要检查 id

spark.sql("""
SELECT COUNT(*) FROM 
    (SELECT * FROM nodes2 WHERE id NOT IN  
    (SELECT id FROM nodes1))
""").show()

用 NOT IN 匹配多列(或整行):

或者如果你真的想匹配完整的行(所有列),在所有列上使用类似 concat 的东西来匹配

spark.sql("""
SELECT COUNT(*) FROM 
    (SELECT * FROM nodes2 as WHERE CONCAT(id,label) NOT IN (SELECT CONCAT(id,label) FROM nodes1))
""").show()

或使用别名

spark.sql("""
SELECT COUNT(*) FROM 
    (SELECT * FROM nodes2 n2 as WHERE CONCAT(n2.id,n2.label) NOT IN (SELECT CONCAT(n1.id,n1.label) FROM nodes1 n1))
""").show()