Trái ngược với Show
3, 4, 5, v.v.) để giúp bạn quản lý bộ đệm trong bộ nhớ của mình và sẽ sử dụng thuật toán thực hiện kết xuất và tải vào phụ trợ lưu trữ cho bạn.
7 có thể được sử dụng để tùy chỉnh thêm cách lưu trữ dữ liệu của bạn. Thật dễ dàng như nhau (cùng một giao diện chính xác) để sử dụng cơ sở dữ liệu (MySQL, v.v.) làm phụ trợ thay vì hệ thống tập tin của bạn. Bạn có thể sử dụng cờ 8 để tắt bộ nhớ đệm bộ nhớ hoàn toàn, và đọc trực tiếp và ghi vào và từ đĩa hoặc cơ sở dữ liệu.
Nhận So sánh CSV, Pickle, Parquet, Feather và HDF5Hình ảnh của tác giả.Khi Kaggle cuối cùng đã phát động một cuộc thi dữ liệu dạng bảng mới sau tất cả thời gian này, lúc đầu, mọi người đã rất phấn khích. Cho đến khi họ weren. Khi Kagglers phát hiện ra rằng bộ dữ liệu lớn 50 GB, cộng đồng bắt đầu thảo luận về cách xử lý các bộ dữ liệu lớn như vậy [4].
Ngoài việc giảm không gian đĩa cần thiết bằng cách giảm các kiểu dữ liệu, câu hỏi là định dạng để lưu bộ dữ liệu đã sửa đổi ở giữa các phiên làm việc [4]. Định dạng tệp CSV mất nhiều thời gian để viết và đọc các bộ dữ liệu lớn và cũng không nhớ loại dữ liệu cột cột trừ khi được nói rõ ràng. Bài viết này khám phá bốn lựa chọn thay thế cho định dạng tệp CSV để xử lý các bộ dữ liệu lớn: Pickle, Feather, Parquet và HDF5. Ngoài ra, chúng tôi sẽ xem xét các định dạng tệp này với nén.This article explores four alternatives to the CSV file format for handling large datasets: Pickle, Feather, Parquet, and HDF5. Additionally, we will look at these file formats with compression. Bài viết này khám phá các định dạng tệp thay thế với thư viện Pandas. Bây giờ, bạn có thể nghĩ rằng tại sao bạn thậm chí sẽ sử dụng gấu trúc khi làm việc với các bộ dữ liệu lớn? - Đó là một câu hỏi công bằng. Mặc dù một giải pháp thay thế cho các gấu trúc như DataTable sẽ nhanh hơn trong việc đọc và viết các tệp CSV, nhưng lợi thế của gấu trúc là nó cung cấp rất nhiều sự linh hoạt cho việc xử lý dữ liệu. Ngoài ra, gấu trúc hỗ trợ đọc và viết rất nhiều định dạng tệp ra khỏi hộp. Một lần nữa, một giải pháp thay thế như DataTables chỉ hỗ trợ các định dạng CSV, Jay, XLSX và văn bản thuần túy [3].“Why would you even use pandas when working with large datasets?” — That is a fair question. Although an alternative to pandas like Datatable would be faster at reading and writing CSV files, the advantage of pandas is that it offers a lot of flexibility for data processing. Additionally, pandas supports reading and writing a lot of file formats out of the box. Again, an alternative like Datatables does only support CSV, Jay, XLSX, and plain text formats [3]. Bạn có thể tìm thấy mã trong sổ ghi chép Kaggle của tôi. Thiết lập điểm chuẩnVới mục đích điểm chuẩn, chúng tôi sẽ tạo ra một bộ dữ liệu hư cấu. Bộ dữ liệu hư cấu này chứa một cột của mỗi loại dữ liệu với các ngoại lệ sau: Các cột có kiểu dữ liệu # Reading0 và # Reading1 bị bỏ qua cho ví dụ này vì Parquet không hỗ trợ # Reading0 và HDF5 với # Reading3 không hỗ trợ # Reading1. Để giảm nhiễu thời gian để so sánh, bộ dữ liệu hư cấu này chứa 10.000.000 hàng và gần 1Gblarge như được đề xuất trong [8].is almost 1GB large as suggested in [8].Trưởng bộ dữ liệu hư cấu để điểm chuẩn (hình ảnh của tác giả qua Kaggle) Các đặc điểm của dữ liệu có thể tác động đến thời gian đọc và viết, ví dụ: Các loại dữ liệu, chiều rộng (số lượng cột) so với chiều dài (số lượng hàng) của DataFrame. Tuy nhiên, điều này nằm ngoài phạm vi của bài viết này. Để đọc thêm, tôi đề xuất các tài nguyên sau: Tổng quan về định dạng tệpTrong phần này, chúng tôi sẽ liên lạc ngắn gọn về một số đặc điểm chính cho mỗi định dạng tệp: mô tả ngắn, mở rộng tệp, nén được sử dụng và các phương thức đọc và ghi gấu trúc. Giá trị phân tách bằng dấu phẩy (CSV)Một tệp văn bản sử dụng dấu phẩy để tách các giá trị. Phần mở rộng tệp là # Reading5. Trong bài viết này, chúng tôi sẽ sử dụng nén GZIP. # Reading Dưa chua
Phần mở rộng tệp là # Reading7. Trong bài viết này, chúng tôi sẽ sử dụng nén GZIP. # Reading Dưa chua
Phần mở rộng tệp là # Reading7. Sàn gỗ # Reading Apache Parquet là một định dạng lưu trữ cột có sẵn cho bất kỳ dự án nào trong hệ sinh thái Hadoop, bất kể lựa chọn khung xử lý dữ liệu, mô hình dữ liệu hoặc ngôn ngữ lập trình. [2]
Trong bài viết này, chúng tôi sẽ sử dụng công cụ Pyarrow và nén GZIP. Lông vũ # Reading Feather là một định dạng tệp di động để lưu trữ các bảng mũi tên hoặc khung dữ liệu (từ các ngôn ngữ như Python hoặc R) sử dụng định dạng IPC mũi tên trong nội bộ. Feather đã được tạo ra sớm trong dự án mũi tên như một bằng chứng về khái niệm cho việc lưu trữ khung dữ liệu nhanh, ngôn ngữ cho Python (Pandas) và R. [1]
Vì nén GZIP không có sẵn cho định dạng lông, chúng tôi sẽ sử dụng nén ZSTD thay thế. Định dạng dữ liệu phân cấp (HDF5)
HDF5 có hai tùy chọn định dạng: # Reading1, nhanh chóng viết [6] # Reading # Readingdf = pd.read_pickle(file_name)# Writingdf.to_pickle(file_name, compression = ...) # None or "gzip"2, chậm hơn nhưng cung cấp các hoạt động linh hoạt như tìm kiếm/chọn tập hợp con của dữ liệu [6]Để đọc và viết các tệp HDF5, bạn cần cài đặt # Reading3. Vì nén GZIP không có sẵn cho định dạng lông, chúng tôi sẽ sử dụng nén ZLIB thay thế.So sánh Phần này so sánh năm định dạng tệp theo thời gian viết, kích thước tệp, thời gian đọc và các đặc điểm linh tinh như khả năng đọc sách của con người, tính nhất quán, thời gian lưu trữ dự định và tính di động và hiệu suất trên các bộ dữ liệu nhỏ.Thời gian viếtCompression increases the writing time of any file format. But this should not be surprising as compression of data is an additional task during the writing process. Dưới đây, bạn có thể thấy thời gian cần thiết để viết tệp cho mỗi định dạng tệp. Các thanh màu đen rắn biểu thị thời gian ghi cho các tệp không nén, trong khi các thanh băm biểu thị thời gian ghi cho các tệp nén.
Lông và Parquet có thời gian viết nhanh nhấtFeather có thời gian viết nhanh nhất cho cả các tệp không nén và nén Đúng như dự đoán, HDF5 với# Reading4 nhanh hơn # Reading5, nhưng với nén HDF5 với # Reading6 tương tự như # Reading3 Kích thước tập tin
CSV là tệp lớn nhấtLọc là tệp nhỏ nhất không nén Parquet và HDF5 với# Reading5 là các tệp nén nhỏ nhất Kích thước tập tin
Điều khoản khácBên cạnh thời gian đọc và viết và kích thước tệp, chúng ta cũng nên xem xét một vài đặc điểm khác: khả năng đọc sách của con người, tính nhất quán, thời gian lưu trữ dự định và tính di động và hiệu suất trên các bộ dữ liệu nhỏ. Human-Readability CSV là định dạng tệp duy nhất có thể đọc được bởi một con người. Tất cả các định dạng tệp thay thế là định dạng nhị phân và do đó không thể đọc được bởi con người. Tính nhất quán Trừ khi bạn nói rõ ràng phương thức # Reading2 với kiểu dữ liệu nào để đọc từng cột, định dạng tệp CSV không nhớ các loại dữ liệu. Điều này đòi hỏi kiến thức trước đây về các loại dữ liệu và cũng là một nỗ lực bổ sung. Nếu các loại dữ liệu không được liệt kê rõ ràng trong phương thức đọc, điều này có thể dẫn đến tăng không gian lưu trữ cần thiết vì tất cả các số nguyên được đọc là # Reading3, tất cả các phao được đọc là # Reading4 và # Reading5 và # Reading1 được đọc là # Reading7. Dưới đây, bạn có thể thấy DataFrame gốc và DataFrame sau khi ghi và đọc từ tệp CSV:So sánh các loại dữ liệu cột trước và sau khi ghi và đọc từ tệp CSV (hình ảnh của tác giả qua Kaggle) Như bạn có thể thấy do việc sử dụng các loại dữ liệu nhỏ hơn sang các loại dữ liệu lớn hơn, việc sử dụng bộ nhớ cần thiết tăng lên. Thời gian lưu trữ dự định và tính di động Pickle và lông vũ được dự định để lưu trữ ngắn hạn [7, 8, 9]. Pickle được dự định để lưu các đối tượng Python giữa các phiên làm việc và do đó chỉ được Python hỗ trợ. Feather được dự định để trao đổi dữ liệu giữa Python và R [9]. Cả dưa chua và lông cũng không được đảm bảo là ổn định giữa các phiên bản [7, 9]. Hiệu suất trên bộ dữ liệu nhỏ Mặc dù, bài viết này tập trung vào các bộ dữ liệu lớn, thật đáng chú ý khi đề cập đến thời gian đọc và viết kém của định dạng HDF5 cho các bộ dữ liệu nhỏ. Như được hiển thị bên dưới, việc đọc một tệp HDF5 thậm chí mất nhiều thời gian hơn tệp CSV nếu tập dữ liệu nhỏ hơn 2 MB.poor reading and writing times of HDF5 format for small datasets. As shown below, reading an HDF5 file takes even longer than a CSV file if the dataset is less than 2 MB. So sánh thời gian viết và đọc cho các định dạng tệp khác nhau trên các kích thước tệp khác nhau (hình ảnh của tác giả qua Kaggle)Bảng sau đây tóm tắt phần này so sánh này: So sánh CSV, Pickle, Parquet, Feather và HDF5 (hình ảnh của tác giả)Sự kết luậnĐúng như dự đoán, định dạng tệp CSV vừa chậm nhất trong việc đọc và ghi tệp. Trừ khi bạn đang tối ưu hóa kích thước tệp, tất cả các lựa chọn thay thế chỉ bằng một nửa định dạng tệp CSV. Thật không may, câu hỏi một triệu đô la có một câu trả lời không thỏa mãn:
Dưới đây là nỗ lực của tôi trong việc chứng minh thêm một chút chi tiết cho phần Nó phụ thuộc vào một phần của câu trả lời này. Tôi quan tâm để nghe đầu vào của bạn về điều này.I am interested to hear your input on this. Một nỗ lực cung cấp một hướng dẫn sơ bộ để chọn định dạng tệp tốt nhất (hình ảnh của tác giả)Mặc dù có nhược điểm, CSV được sử dụng rộng rãi. Có vẻ như thực tế là nó có thể đọc được của con người và không phải là định dạng tệp nhị phân làm cho nó trở thành một định dạng tệp trực quan, mà bạn có thể nhanh chóng mở ra và xem xét mà không gặp rắc rối nào. Vì vậy, trừ khi bạn đang làm việc với nhiều gigabyte dữ liệu, CSV vẫn là một tùy chọn chấp nhận được.
Thích câu chuyện này?Để đọc thêm câu chuyện từ tôi và các nhà văn khác, hãy đăng ký trên Medium. Bạn có thể hỗ trợ tôi bằng cách sử dụng liên kết giới thiệu của tôi khi bạn đăng ký. Tôi sẽ nhận được một khoản hoa hồng mà không phải trả thêm chi phí cho bạn. Tìm tôi trên LinkedIn và Kaggle! Người giới thiệu[1] Mũi tên Apache, định dạng tệp Feather Feather. Apache.org. https://arrow.apache.org/docs/python/feather.html (truy cập ngày 25 tháng 7 năm 2022) [2] Apache Parquet, Tổng quan về trực tiếp. Apache.org. https://parquet.apache.org/docs/overview/ (truy cập ngày 25 tháng 7 năm 2022) [3] DataTable, Data DataTable.Fread (). DataTable.Readthedocs.io. https://datatable.readthedocs.io/en/latest/api/dt/fread.html (truy cập ngày 25 tháng 7 năm 2022) [4] C. Deotte, Cách làm thế nào để giảm kích thước dữ liệu. kaggle.com. https://www.kaggle.com/competitions/amex-default-prediction/discussion/328054 (truy cập ngày 25 tháng 7 năm 2022) [5] Nhóm HDF, HDF5. hdfgroup.org. https://portal.hdfgroup.org/display/hdf5/hdf5 (truy cập ngày 25 tháng 7 năm 2022) . pydata.org. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.dataframe.to_hdf.html (truy cập ngày 25 tháng 7 năm 2022) . Python.org. https://docs.python.org/3/l Library/pickle.html (truy cập ngày 25 tháng 7 năm 2022) . stackoverflow.com. https: . rstudio.com. https://www.rstudio.com/blog/feather/ (truy cập ngày 25 tháng 7 năm 2022) Làm thế nào để Python lưu trữ nhiều dữ liệu?Nếu chúng ta muốn giữ mọi thứ đơn giản, chúng ta có thể sử dụng mô -đun Pickle, đây là một phần của thư viện tiêu chuẩn để lưu dữ liệu trong Python. Chúng ta có thể sử dụng các đối tượng python Pickle Pickle vào một tệp Pickle, mà chúng ta có thể sử dụng để lưu/tải dữ liệu. Nếu bạn chạy tập lệnh này, bạn sẽ nhận thấy một tệp được gọi là dữ liệu. Pickle, trong đó chứa dữ liệu đã lưu.use the pickle module, which is a part of the standard library to save data in Python. We can “pickle” Python objects to a pickle file, which we can use to save/load data. If you run this script, you'll notice a file called data. pickle , which contains the saved data.
Làm thế nào để Python xử lý một lượng lớn dữ liệu?Khi dữ liệu quá lớn để phù hợp với bộ nhớ, bạn có thể sử dụng tùy chọn phân đoạn của Pandas để chia dữ liệu thành các khối thay vì xử lý một khối lớn.use Pandas' chunksize option to split the data into chunks instead of dealing with one big block.
Làm thế nào để Python đọc dữ liệu lớn?Để đọc các tệp văn bản lớn trong Python, chúng ta có thể sử dụng đối tượng tệp làm trình lặp lại để lặp qua tệp và thực hiện tác vụ cần thiết.Vì trình lặp chỉ lặp lại trên toàn bộ tệp và không yêu cầu bất kỳ cấu trúc dữ liệu bổ sung nào để lưu trữ dữ liệu, nên bộ nhớ được tiêu thụ ít hơn.use the file object as an iterator to iterate over the file and perform the required task. Since the iterator just iterates over the entire file and does not require any additional data structure for data storage, the memory consumed is less comparatively.
Python có thể xử lý dữ liệu lớn không?Python cung cấp một số lượng lớn các thư viện để làm việc trên dữ liệu lớn.Bạn cũng có thể làm việc - về mặt phát triển mã - sử dụng Python cho dữ liệu lớn nhanh hơn nhiều so với bất kỳ ngôn ngữ lập trình nào khác.Hai khía cạnh này đang cho phép các nhà phát triển trên toàn thế giới nắm lấy Python là ngôn ngữ được lựa chọn cho các dự án dữ liệu lớn.. You can also work – in terms of developing code – using Python for Big Data much faster than any other programming language. These two aspects are enabling developers worldwide to embrace Python as the language of choice for Big Data projects. |