暫存中間結果
如同你在第 1 章所見,在 R 與 Spark 間複製資料本質上很慢。這表示像前一個練習那樣收集資料,應該只在你真的需要時才做。
管線運算子非常適合把資料處理指令串接起來,但通常你不可能把整個分析全部串在一起完成。舉例來說,下面這樣做很糟,因為你永遠無法除錯你的程式碼。
final_results <- starting_data %>%
# 743 個步驟串在一起
# ... %>%
collect()
這帶來兩難。你需要儲存中間計算的結果,但又不想用 collect,因為它很慢。解法是使用 compute() 來執行計算,但把結果儲存在 Spark 上的臨時資料框中。compute 接受兩個引數:一個 tibble,以及要用來在 Spark 上儲存結果的資料框名稱。
a_tibble %>%
# 一些計算 %>%
compute("intermediate_results")
本練習屬於課程
使用 R 的 sparklyr:Spark 入門
練習說明
我們已為你建立 spark_conn 這個 Spark 連線。連到 Spark 中曲目中繼資料的 tibble 已預先定義為 track_metadata_tbl。
- 篩選
track_metadata_tbl中artist_familiarity大於 0.8 的列。 - 使用
compute()計算結果。- 把結果儲存在名為
"familiar_artists"的 Spark 資料框中。 - 把結果指定給名為
computed的 R tibble。
- 把結果儲存在名為
- 使用
src_tbls()檢視可用的 Spark 資料集。 - 列印
computed的class()。請注意,與collect()不同,compute()會回傳遠端的 tibble。資料仍然儲存在 Spark 叢集上。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# track_metadata_tbl has been pre-defined
track_metadata_tbl
computed <- track_metadata_tbl %>%
# Filter where artist familiarity is greater than 0.8
___ %>%
# Compute the results
___
# See the available datasets
___
# Examine the class of the computed results
___