爆米花雙重放映
你在前兩章看到的 dplyr 方法是使用 Spark 的 SQL 介面。也就是說,它們會先把你的 R 程式碼轉成 SQL,再交給 Spark 執行。這樣做非常適合基本的資料處理,但在需要更進階的運算時就會遇到限制。例如,你可以計算欄位的平均數,但無法直接計算中位數。以下是你在第 1 章「彙總欄位」練習中做過的範例:
track_metadata_tbl %>%
summarize(mean_duration = mean(duration)) #OK
track_metadata_tbl %>%
summarize(median_duration = median(duration))
sparklyr 也提供兩種「原生」介面,會在接下來兩章介紹。所謂原生,是指它們直接呼叫 Java 或 Scala 程式碼來存取 Spark 的函式庫,而不需轉成 SQL。sparklyr 支援 Spark DataFrame 的 Application Programming Interface(API),其函式以 sdf_ 作為前綴;同時也支援 Spark 的機器學習函式庫 MLlib,其中「特徵轉換」函式以 ft_ 開頭,「機器學習」函式以 ml_ 開頭。
在使用 R 與使用 Spark 之間,有一個重要的觀念差異:Spark 對變數型別的要求比 R 嚴格許多。多數原生函式需要 DoubleType 輸入,並回傳 DoubleType 輸出。DoubleType 是 Spark 對應於 R numeric 向量型別的等價型別。sparklyr 會處理把 numeric 轉成 DoubleType,但將 logical 或 integer 資料轉成 numeric(以及轉回)則需要由使用者(也就是你!)自行處理。
以下哪些敘述是正確的?
sparklyr的dplyr方法會把程式碼轉成 Scala,然後在 Spark 上執行。- 將 R 程式碼轉成 SQL 會限制可支援的運算種類。
- 大多數 Spark MLlib 的建模函式需要
DoubleType輸入並回傳DoubleType輸出。 - 大多數 Spark MLlib 的建模函式需要
IntegerType輸入並回傳BooleanType輸出。
本練習屬於課程
