Avatar
Ba
Tăng tốc truy vấn dữ liệu với Apache Parquet

Tăng tốc truy vấn dữ liệu với Apache Parquet


Apache Parquet là một định dạng file hỗ trợ việc xử lý data phức tạp với rất nhiều những đặc tính thú vị.

Trong một số trường hợp bạn có thể sử dụng định dạng Parquet thay vì sử dụng file CSV vì 2 lý do sau:

  • Khi bạn cần lưu trữ tiết kiệm
  • Bạn cần truy vấn nhanh theo cột trong bài toán cụ thể của mình

1) Hướng cột - Columnar


Không như những dạng hướng theo dòng như CSV, Parquet là dạng dữ liệu hướng theo cột, tức là các cột sẽ được lưu trữ liền kề nhau thay vì các dòng.



2) Lưu trữ hướng cột


Khi ổ đĩa quay, dữ liệu ghi trên đĩa sẽ được đọc bởi đầu đọc. Mỗi giá trị x ở dưới được biểu diễn bởi một cột của bảng.

Giả sử bạn chỉ muốn đọc cột Feature 3 thì với dữ liệu hướng dòng (row-oriented) bạn cần đọc tất cả các dòng, ở mỗi dòng bạn lại thu được một giá trị ở cột Feature 3.

Giả sử bạn có một bảng có 10610^6 dòng và 3 cột thì bạn cần duyệt qua toàn bộ số dòng này mới lấy được cột Feature 3.

Trong trường hợp, nếu ta sử dụng lưu trữ hướng cột sẽ cho tốc độ nhanh hơn nhiều.

Ngoài ra lưu trữ hướng cột cũng cho ta một số lợi thế về lưu trữ khi các giá trị trong cột có xu hướng giống nhau nên ta có thể sử dụng các thuật toán nén. Vì thế file Parquet sẽ nhẹ hơn các dạng lưu trữ khác. Ví dụ một file CSV 1TB khi chuyển sang dạng Parquet chỉ khoảng 100GB (còn 10% không gian lưu trữ).

3) Thực hiện tạo Parquet file với Pyarrow


Cài đặt thư viện:

!pip install pyarrow

Tạo mảng chứa 100 phần tử:

import numpy as np
import pyarrow as pa

arr = pa.array(np.arange(100))

print(f"{arr[0]} .. {arr[-1]}")

Định dạng Parquet là bảng chứa rất nhiều cột nên ta cần đặt tên cho cột này.

table = pa.Table.from_arrays([arr], names=["Feature 3"])

import pyarrow.parquet as pq

pq.write_table(table, "example.parquet", compression=None)

Kết quả ta đã được một file này:

4) Tiến hành đọc file Parquet


import pyarrow.parquet as pq

table = pq.read_table("example.parquet")

Kết quả hiện ra:

5) Kết luận

Hi vọng bạn đã có thêm lựa chọn khi xử lý dữ liệu lớn.

6) Nguồn tham khảo