1. 学ぶ
  2. /
  3. コース
  4. /
  5. sparklyr を使った Spark 入門(R)

Connected

演習

中間結果の保存

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")

指示

100 XP

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 クラスター上に保存されています。