2016-11-16 40 views
1

我有两个表:排除和kaggleresults。我试图寻找存在于excluded记录,但在kaggleresults如何获取表1中存在但不是表2中的记录?

计数不存在:

scala> spark.sql("select * from excluded").count() 
res136: Long = 4652 

scala> spark.sql("select * from kaggleresults").count() 
res137: Long = 4635 

不同的是17

scala> res136-res137 
res139: Long = 17 

我试图让那些17条记录。我在下面写了查询,但它返回38

scala> spark.sql("select * from excluded left join kaggleresults on kaggleresults.subject_id = excluded.subject_id where kaggleresults.subject_id is null").count() 
res135: Long = 38 

问题

查询什么,我需要写让那些17点的记录?

+1

请你能告诉我这些表之间的共同ID –

+0

安东尼排除查询看起来是正确的。你可以通过像你所做的那样通过左连接,EXISTS或NOT IN来完成,但是所有的结果都应该产生相同的结果,你可能会得到38,因为38条记录不存在。你说的是17,但是可能发生的另一个变化是在kaggresults中的记录不是排除在外的,你可能有21条记录,这就意味着净差值为17 – Matt

+0

@Anthony请检查下面的查询我认为它将为你工作 –

回答

1

对于实际的记录(未计数),你可以使用

SELECT * FROM excluded 
WHERE subject_id NOT IN (SELECT subject_id FROM kaggleresults) 

但是,你不应该感到惊讶。如果产生的行数不匹配的差异两个表格的个别行数。

例如:假设table1的id是1,2,3,4和5,table2的id是3,4,5和6. table1和table2的行数分别是5和4,为1的差异,但实际上有两个记录在表1中有ID不存在于表2中的记录。

0

使用不关键字 您可以使用下面的查询

Select * from excluded where subject_id not in (select subject_id from kaggleresults) 
0

是不是LEFT_ANTI加入?

scala> val excluded = (0 to 5).toDS 
left: org.apache.spark.sql.Dataset[Int] = [value: int] 

scala> val kaggleresults = (3 to 10).toDS 
right: org.apache.spark.sql.Dataset[Int] = [value: int] 

scala> excluded.join(kaggleresults, Seq("value"), "leftanti").show 
+-----+ 
|value| 
+-----+ 
| 0| 
| 1| 
| 2| 
+-----+ 
相关问题