始める無料で始める

中間結果の保存

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 データセットを確認しましょう。
  • 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
___
コードを編集して実行