1. Apprendre
  2. /
  3. Cours
  4. /
  5. sparklyr を使った Spark 入門(R)

Connected

Exercice

高度な選択 II: SQL を使う

先ほど説明したように、dplyr インターフェースを使うと、sparklyr はコードを SQL に変換してから Spark に渡します。ほとんどの場合、これで問題ありません。ただし、同じ処理を生の SQL で直接記述することも可能です。コードが書きにくく、デバッグも難しくなるため、通常はあまり推奨されません。しかし、R 以外の環境でも使えるポータブルなコードが必要な場合には便利です。たとえば、sparklyr でデータ処理を試してから、本番環境では生の SQL に切り替えるというワークフローはよく見られます。最初から生の SQL で書いておけば、本番環境に移行する際にそのままクエリをコピー&ペーストできます。

SQL クエリは文字列として記述し、DBI パッケージの dbGetQuery() に渡します。基本的なパターンは次のとおりです。

query <- "SELECT col1, col2 FROM some_data WHERE some_condition"
a_data.frame <- dbGetQuery(spark_conn, query)

これまで書いてきた dplyr のコードとは異なり、dbGetQuery() はクエリをすぐに実行し、結果を R に返します。データの返却を遅らせたい場合は、dbSendQuery() でクエリを実行し、その後 dbFetch() で結果を取得することもできます。これは発展的な使い方のため、ここでは扱いません。また、DBI は低レベルなパッケージのため、DBI の関数は tibble ではなく data.frame を返す点にも注意してください。

SQL の書き方についてさらに学びたい方は、SQL 入門コースをご覧ください。

Instructions

100 XP

Spark への接続は spark_conn として作成済みです。Spark に格納されたトラックのメタデータに紐づいた tibble は track_metadata_tbl として定義されており、SQL クエリでは track_metadata としてアクセスできます。

  • track_metadata Spark データフレームから、year が 1935 年未満かつ duration が 300 秒を超えるすべての列を選択するクエリを完成させましょう。
  • dbGetQuery() を呼び出してクエリを実行し、結果を results に代入してから出力を確認しましょう。