使用 parquet 檔案
CSV 檔很適合把矩形資料物件(例如 R 的 data.frame 與 Spark 的 DataFrame)存到磁碟。不過它們讀寫速度很慢,遇到大型資料集就不好用。Parquet 檔提供了效能更高的替代方案。除了可用於 Spark 的資料外,parquet 檔也能搭配 Hadoop 生態系中的其他工具,例如 Shark、Impala、Hive 與 Pig。
嚴格來說,稱作「parquet 檔」並不精確。當你以 parquet 格式儲存資料時,實際上會得到整個目錄的一組檔案。資料會被拆成多個 .parquet 檔,便於分散在多臺機器上儲存,同時也會包含一些中繼資料檔,描述各欄位的內容。
sparklyr 可以使用 spark_read_parquet() 匯入 parquet 檔。這個函式需要一個 Spark 連線、要建立的 Spark DataFrame 名稱字串,以及 parquet 目錄的路徑。請注意,這個函式會把資料直接匯入 Spark,通常會比先匯入 R 再用 copy_to() 從 R 複製到 Spark 還要快。
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
本練習屬於課程
使用 R 的 sparklyr:Spark 入門
練習說明
已為你建立名為 spark_conn 的 Spark 連線。也已為你建立指向 parquet 目錄(R 執行所在檔案系統)的字串 parquet_dir。
- 使用
dir()列出 parquet 目錄中檔案的「絕對」路徑,並將結果指定給filenames。- 第 1 個引數應是你要列出其檔案的目錄
parquet_dir。 - 若要取得絕對(非相對)路徑,請同時傳入
full.names = TRUE。
- 第 1 個引數應是你要列出其檔案的目錄
- 建立一個包含兩欄的
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 <- ___