Lưu trữ kết quả trung gian
Như bạn đã thấy ở Chương 1, sao chép dữ liệu giữa R và Spark vốn dĩ rất chậm. Điều đó có nghĩa là việc thu thập dữ liệu như trong bài trước chỉ nên làm khi bạn thật sự cần.
Toán tử pipe rất tiện để xâu chuỗi các lệnh xử lý dữ liệu, nhưng nói chung, bạn không thể làm cả phân tích với mọi thứ nối chuỗi liền mạch. Ví dụ dưới đây là một thói quen tệ, vì bạn sẽ không thể gỡ lỗi mã của mình.
final_results <- starting_data %>%
# 743 bước được pipe liên tiếp
# ... %>%
collect()
Điều đó tạo ra thế khó. Bạn cần lưu các kết quả tính toán trung gian, nhưng bạn không muốn collect vì nó chậm. Giải pháp là dùng compute() để thực thi phép tính, nhưng lưu kết quả trong một data frame tạm thời trên Spark. compute nhận hai đối số: một tibble và một tên biến cho Spark data frame sẽ lưu kết quả.
a_tibble %>%
# một vài phép tính %>%
compute("intermediate_results")
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 là spark_conn. Một tibble gắn với track metadata được lưu trên Spark đã được định nghĩa trước là track_metadata_tbl.
- Lọc các hàng của
track_metadata_tblnơiartist_familiaritylớn hơn 0.8. - Tính toán kết quả bằng
compute().- Lưu kết quả trong một Spark data frame tên
"familiar_artists". - Gán kết quả cho một R tibble tên
computed.
- Lưu kết quả trong một Spark data frame tên
- Xem các tập dữ liệu Spark hiện có bằng
src_tbls(). - In
class()củacomputed. Lưu ý rằng khác vớicollect(),compute()trả về một remote tibble. Dữ liệu vẫn được lưu trong cụm Spark.
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.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
computed <- track_metadata_tbl %>%
# Filter where artist familiarity is greater than 0.8
___ %>%
# Compute the results
___
# See the available datasets
___
# Examine the class of the computed results
___