0

Rust & Jupyter Notebook - Phân tích dữ liệu với Polars (Phần 02)

pola-rs sử dụng kiến trúc bộ nhớ của Apche Arrow, rất khác với panda viết bằng Python và tất nhiên là tốc độ cao hơn rất nhiều so với panda. pola-rs cũng có các DataFrame là đối tượng chính mà chúng ta thường xuyên làm việc trên đó.

Các DataFrame có cấu trúc 2D dạng bảng với hàng và cột. Bên trong, về bản chất nó là một véc-tơ các Series, với mỗi Series là một cột. Như vậy, dễ thấy có một ràng buộc ở đây là tất cả các Series hay cột trong cùng một DataFrame bắt buộc phải có độ dài giống nhau.

Các Series trong polars lại là một mảng 1D có tên định danh và chứa các giá trị có cùng một kiểu dữ liệu (ví dụ i32, f64, v.v.). Thực ra nó là một lớp bao trừu tượng xung quanh các giá trị có kiểu ChunkedArray để thuận tiện hơn cho việc lập trình. ChunkedArray<T> là cốt lõi của Series.

Trong các ChunkedArray, thay vì lưu trữ tất cả dữ liệu cột trong một khối bộ nhớ lớn duy nhất, nó sẽ lưu một danh sách các phần nhỏ hơn, được xắp sếp liên tục, mỗi phần như vậy được gọi là một "chunk" và mỗi "chunk" lại thực chất là một Array. Có thể nói ChunkedArray là một véc-tơ của các Array kiểu Vec<Box<dyn Array>>.

Vậy tại sao lại tổ chức các DataFrame như vậy? Tại sao lại tổ chức thành các "chunk"?

Để có thể hiểu hơn về cách polars tổ chức bộ nhớ cho công tác phân tích xử lý dữ liệu lớn, có lẽ sẽ tốt hơn nếu chúng ta tự mình trải nghiệm từng bước từng bước một qua các video hướng dẫn cùng các ví dụ thực tế kèm diễn giải. Các bạn hãy xem video thứ hai trong chuỗi video về polars trên kênh Youtube RustDEV Vietnam: #0036 - Phân tích dữ liệu với polars (Phần 02)”


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí