2016-11-16 58 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| 
+-----+ 
相關問題