開始使用免費開始

暫存中間結果

如同你在第 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_tblartist_familiarity 大於 0.8 的列。
  • 使用 compute() 計算結果。
    • 把結果儲存在名為 "familiar_artists" 的 Spark 資料框中。
    • 把結果指定給名為 computed 的 R tibble。
  • 使用 src_tbls() 檢視可用的 Spark 資料集。
  • 列印 computedclass()請注意,與 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
___
編輯並執行程式碼