Semi join
Semi join 是 anti join 的相反;你可以把它想成「反反 join」。
Semi join 會回傳第一個資料表中,在第二個資料表「找得到對應鍵」的那些列。下圖示意其原理。

語法與其他 join 類型相同;只要把 join 函式換成 semi_join() 即可。
semi_join(a_tibble, another_tibble, by = c("id_col1", "id_col2"))
你可能也注意到,semi join 的結果加上 anti join 的結果,會組合回原始資料表。因此,不論資料表內容或 join 的方式為何,semi_join(A, B) 加上 anti_join(A, B) 都會得到 A(列的順序可能不同)。
本練習屬於課程
使用 R 的 sparklyr:Spark 入門
練習說明
我們已為你建立 spark_conn Spark 連線。存放在 Spark 裡的曲目中繼資料與演出者標籤,分別已附加為 track_metadata_tbl 與 artist_terms_tbl tibbles。
- 使用 semi join,依
artist_id欄位將演出者標籤與曲目中繼資料進行連接。把結果指定給joined。 - 使用
sdf_dim()來判斷 joined 資料表共有多少列與多少欄。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# track_metadata_tbl and artist_terms_tbl have been pre-defined
track_metadata_tbl
artist_terms_tbl
# Semi join artist terms to track metadata by artist_id
joined <- ___
# How many rows and columns are in the joined table?
___