Làm việc với các tệp parquet
Các tệp CSV rất hữu ích để lưu nội dung của các đối tượng dữ liệu dạng hình chữ nhật (như R data.frame và Spark DataFrame) xuống đĩa. Vấn đề là chúng đọc/ghi rất chậm, khiến chúng không dùng được với các bộ dữ liệu lớn. Tệp Parquet mang lại một lựa chọn hiệu năng cao hơn. Bên cạnh việc dùng cho dữ liệu Spark, tệp parquet còn có thể dùng với các công cụ khác trong hệ sinh thái Hadoop như Shark, Impala, Hive và Pig.
Về mặt kỹ thuật, gọi là tệp parquet chưa thật chính xác. Khi bạn lưu dữ liệu theo định dạng parquet, thực tế bạn nhận được cả một thư mục gồm nhiều tệp. Dữ liệu được chia nhỏ vào nhiều tệp .parquet, giúp dễ lưu trên nhiều máy; ngoài ra còn có một số tệp siêu dữ liệu mô tả nội dung của từng cột.
sparklyr có thể nhập tệp parquet bằng spark_read_parquet(). Hàm này nhận một kết nối Spark, một chuỗi đặt tên cho Spark DataFrame sẽ được tạo, và một đường dẫn tới thư mục parquet. Lưu ý rằng hàm này sẽ nhập dữ liệu trực tiếp vào Spark, thường nhanh hơn so với việc nhập dữ liệu vào R rồi dùng copy_to() để sao chép dữ liệu từ R sang Spark.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Bài tập này là một phần của khóa học
Nhập môn Spark với sparklyr trong R
Hướng dẫn bài tập
Một kết nối Spark đã được tạo sẵn cho bạn là spark_conn. Một chuỗi trỏ tới thư mục parquet (trên hệ thống tệp nơi R đang chạy) đã được tạo sẵn là parquet_dir.
- Dùng
dir()để liệt kê đường dẫn tệp tuyệt đối của các tệp trong thư mục parquet, gán kết quả chofilenames.- Đối số đầu tiên nên là thư mục mà bạn đang liệt kê tệp,
parquet_dir. - Để lấy đường dẫn tuyệt đối (thay vì tương đối), bạn cũng cần truyền
full.names = TRUE.
- Đối số đầu tiên nên là thư mục mà bạn đang liệt kê tệp,
- Tạo một
data_framevới hai cột.filenamenên chứa tên tệp bạn vừa lấy được, không gồm phần thư mục. Tạo cột này bằng cách truyền danh sách tên tệp vàobasename().size_bytesnên chứa kích thước các tệp đó. Tạo cột này bằng cách truyền danh sách tên tệp vàofile.size().
- Dùng
spark_read_parquet()để nhập dữ liệu timbre vào Spark, gán kết quả chotimbre_tbl.- Đối số thứ nhất nên là kết nối Spark.
- Đối số thứ hai nên là
"timbre". - Đối số thứ ba nên là
parquet_dir.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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 <- ___