中間結果の保存
Chapter 1 で見たように、R と Spark の間でデータをコピーするのは本質的に時間がかかる処理です。そのため、前の演習で使った collect() によるデータの取得は、本当に必要な場合にのみ行うべきです。
パイプ演算子はデータ操作のコマンドをつなげるのに非常に便利ですが、すべての処理を一つにつなげて分析を完結させることは、一般的にはお勧めできません。たとえば、次のようなコードは、デバッグが非常に困難になるため、避けるべき書き方です。
final_results <- starting_data %>%
# 743 steps piped together
# ... %>%
collect()
ここで問題が生じます。中間計算の結果を保存しておく必要がありますが、collect() を使うと処理が遅くなってしまいます。この問題を解決するには、compute() を使いましょう。compute() は計算を実行しつつ、結果を Spark 上の一時データフレームに保存します。引数は2つで、tibble と、結果を格納する Spark データフレームの変数名を指定します。
a_tibble %>%
# some calculations %>%
compute("intermediate_results")
この演習はコースの一部です
sparklyr を使った Spark 入門(R)
演習の手順
Spark 接続は spark_conn として作成済みです。また、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
___