ビッグデータ、小さな tibble
前の演習でデータを Spark にコピーしたとき、copy_to() は戻り値を返しました。この戻り値は、データそのものを保持しない特殊な tibble() です。これを理解するには、tidyverse パッケージがデータをどのように格納するかを少し知っておく必要があります。tibble は通常、表示方法が改善された data.frame の一種です。ただし、dplyr では、データベースや、今回のような Spark といったリモートデータソースのデータを格納することもできます。リモートデータセットの場合、tibble オブジェクトはリモートデータへの接続情報を保持するだけです。この点については後ほど詳しく説明しますが、今の時点で重要なのは、大きなデータセットを扱っていても、tibble オブジェクト自体のサイズは小さいということです。
Spark 側では、データは DataFrame と呼ばれる変数に格納されます。これは、R の data.frame 型とほぼ同等のものです(ただし、列の変数型の名前は少し異なります。たとえば、numeric 列は DoubleType 列と呼ばれます)。このコース全体では、data.frame と DataFrame を区別する必要がある場合を除き、データフレームという用語を使用します。また、これらの型はデータベースのテーブルとも類似しているため、このような矩形データをテーブルと呼ぶこともあります。
tbl() に Spark 接続と Spark データフレームの名前を表す文字列を渡して呼び出すと、copy_to() を使ったときと同じ tibble オブジェクトが返されます。
この演習で登場する便利なツールが、pryr パッケージの object_size() 関数です。この関数を使うと、オブジェクトが使用しているメモリ量を確認できます。
この演習はコースの一部です
sparklyr を使った Spark 入門(R)
演習の手順
Spark 接続は spark_conn として作成済みです。1,000 曲分のトラックメタデータが、Spark クラスター内のテーブル "track_metadata" に格納されています。
tbl()を使って"track_metadata"テーブルにリンクし、結果をtrack_metadata_tblに代入しましょう。track_metadata_tblに対してdim()を使い、データセットのサイズを確認しましょう。track_metadata_tblに対してobject_size()を使い、tibble のサイズがいかに小さいかを確認しましょう。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Link to the track_metadata table in Spark
track_metadata_tbl <- ___(___, "___")
# See how big the dataset is
___(___)
# See how small the tibble is
___(___)