Từ tác vụ đến các tác vụ nhỏ
Trong bài này, bạn sẽ dùng tính toán song song để áp dụng hàm take_mean_age() nhằm tính tuổi trung bình của vận động viên theo từng năm trong bộ dữ liệu sự kiện Olympic. DataFrame athlete_events đã được nạp sẵn và bao gồm, trong số các cột khác, hai cột sau:
Year: năm diễn ra kỳ OlympicAge: tuổi của vận động viên
Bạn sẽ dùng API multiprocessor.Pool để phân bổ khối lượng công việc qua nhiều tiến trình. Hàm parallel_apply() đã được định nghĩa trong mã mẫu. Hàm này nhận vào hàm cần áp dụng, tiêu chí nhóm, và số lõi cần cho phân tích. Lưu ý rằng decorator @print_timing được dùng để đo thời gian cho mỗi thao tác.
Bài tập này là một phần của khóa học
Introduction to Data Engineering
Hướng dẫn bài tập
- Hoàn thiện mã để bạn áp dụng
take_mean_agelần lượt với1lõi, sau đó2và cuối cùng là4lõi.
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.
# Function to apply a function over multiple cores
@print_timing
def parallel_apply(apply_func, groups, nb_cores):
with Pool(nb_cores) as p:
results = p.map(apply_func, groups)
return pd.concat(results)
# Parallel apply using 1 core
parallel_apply(take_mean_age, athlete_events.groupby('Year'), ____)
# Parallel apply using 2 cores
parallel_apply(take_mean_age, athlete_events.groupby('Year'), ____)
# Parallel apply using 4 cores
parallel_apply(take_mean_age, athlete_events.groupby('Year'), ____)