Parquet ファイルの操作
CSV ファイルは、R の data.frame や Spark の DataFrame などの表形式データをディスクに保存するのに便利なフォーマットです。ただし、読み書きの速度が遅いため、大規模なデータセットには適していません。Parquet ファイルは、そのような場合に高いパフォーマンスを発揮する代替フォーマットです。Spark のデータ形式としてだけでなく、Shark、Impala、Hive、Pig など Hadoop エコシステムの他のツールとも併用できます。
厳密に言うと、Parquet ファイルという表現は正確ではありません。データを Parquet 形式で保存すると、実際には複数のファイルを含むディレクトリが生成されます。データは複数の .parquet ファイルに分割されるため、複数のマシンへの分散保存が容易になります。また、各列の内容を記述したメタデータファイルも含まれます。
sparklyr では、spark_read_parquet() を使って Parquet ファイルをインポートできます。この関数には、Spark 接続、作成する Spark DataFrame の名前を表す文字列、そして Parquet ディレクトリへのパスを渡します。この関数はデータを Spark に直接インポートするため、一度 R にインポートしてから copy_to() で Spark にコピーする方法よりも、通常は高速です。
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
この演習はコースの一部です
sparklyr を使った Spark 入門(R)
演習の手順
Spark 接続は spark_conn として、Parquet ディレクトリへのパス(R が実行されているファイルシステム上)は parquet_dir として、それぞれ事前に用意されています。
dir()を使って Parquet ディレクトリ内のファイルの絶対パスの一覧を取得し、結果をfilenamesに代入してください。- 第1引数には、一覧を取得するディレクトリとして
parquet_dirを指定してください。 - 相対パスではなく絶対パスを取得するために、
full.names = TRUEも渡してください。
- 第1引数には、一覧を取得するディレクトリとして
- 2列からなる
data_frameを作成してください。filename列には、取得したファイル名からディレクトリ部分を除いたものを格納します。basename()にファイル名を渡して作成してください。size_bytes列には、各ファイルのサイズを格納します。file.size()にファイル名を渡して作成してください。
spark_read_parquet()を使って音色(timbre)データを Spark にインポートし、結果をtimbre_tblに代入してください。- 第1引数には Spark 接続を指定してください。
- 第2引数には
"timbre"を指定してください。 - 第3引数には
parquet_dirを指定してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# parquet_dir has been pre-defined
parquet_dir
# List the files in the parquet dir
filenames <- ___
# Show the filenames and their sizes
data_frame(
filename = ___,
size_bytes = ___
)
# Import the data into Spark
timbre_tbl <- ___