【问题标题】: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()

【讨论】:

  • 是否可以对所有列进行完整的行比较?
  • 我已经更新了答案
猜你喜欢
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2012-12-01
  • 2010-10-02
  • 2012-05-04
  • 2013-01-18
  • 1970-01-01
相关资源
最近更新 更多