【问题标题】:Pyspark SQL WHERE NOT IN?Pyspark SQL 在哪里?
【发布时间】:2021-12-14 02:55:42
【问题描述】:
我正在尝试查找 nodes2 但不是 nodes1 中的所有内容。
spark.sql("""
SELECT COUNT(*) FROM
(SELECT * FROM nodes2 WHERE NOT IN
(SELECT * FROM nodes1))
""").show()
收到以下错误:
"cannot resolve 'NOT' given input columns: [nodes2.~id, nodes2.~label];
是否可以在 Pyspark 中进行这种集差运算?
【问题讨论】:
标签:
python
sql
pyspark
apache-spark-sql
【解决方案1】:
将单列与 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()