始める無料で始める

ソート方法の比較:`sdf_sort()` vs `arrange()`

この章ではここまで、Spark の MLlib が提供する特徴量変換関数をいくつか確認してきました。sparklyr では、Spark DataFrame API を活用した関数にもアクセスできます。

dplyr でティブルを並び替えるには、arrange() を使います。また、Spark の DataFrame API を使って sdf_sort() でも並び替えが可能です。この関数は並び替えの基準となる列名を文字ベクトルで受け取ります。なお、現時点では昇順のみがサポートされています。

例として、まず列 x で並び替え、同じ値がある場合は列 y、さらに列 z の順で並び替えるには、次のように dplyr と Spark DataFrame の両方のアプローチを比べてみましょう。

a_tibble %>%
  arrange(x, y, z)
a_tibble %>%
  sdf_sort(c("x", "y", "z"))

どちらの方法が速いかを確認するには、arrange()sdf_sort() の両方を試してみてください。コードの実行時間を測定するには、同名パッケージの microbenchmark() でコードを囲みます。

microbenchmark({
  # your code
})

コードの速度プロファイリングについて詳しくは、Writing Efficient R Code コースで学べます。

この演習はコースの一部です

sparklyr を使った Spark 入門(R)

コースを見る

演習の手順

Spark への接続は spark_conn として作成済みです。Spark に保存されたトラックのメタデータに紐付けられたティブルは、track_metadata_tbl として事前に定義されています。

  • microbenchmark() を使って、以下の操作にかかる時間を比較しましょう。
    • arrange() を使って、track_metadata_tbl の行を yearartist_namereleasetitle の順に並び替えます。
    • 結果を収集します。
    • 今度は arrange() の代わりに sdf_sort() を使って、同じ操作を行います。列名はクォートで囲むことを忘れずに。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# track_metadata_tbl has been pre-defined
track_metadata_tbl

# Compare timings of arrange() and sdf_sort()
microbenchmark(
  arranged = track_metadata_tbl %>%
    # Arrange by year, then artist_name, then release, then title
    ___ %>%
    # Collect the result
    ___,
  sorted = track_metadata_tbl %>%
    # Sort by year, then artist_name, then release, then title
    ___ %>%
    # Collect the result
    ___,
  times = 5
)
コードを編集して実行