Hướng dẫn how does python store large data? - python lưu trữ dữ liệu lớn như thế nào?

Trái ngược với shelf, klepto không cần lưu trữ toàn bộ dict trong một tệp (sử dụng một tệp duy nhất là rất chậm đối với đọc-viết khi bạn chỉ cần một mục nhập). Ngoài ra, trái ngược với shelf, klepto có thể lưu trữ hầu hết mọi loại đối tượng Python bạn có thể đặt trong từ điển (bạn có thể lưu trữ các chức năng, lambdas, phiên bản lớp, ổ cắm, hàng đợi đa xử lý, bất cứ điều gì).

Show

klepto cung cấp một bản tóm tắt từ điển để ghi vào cơ sở dữ liệu, bao gồm coi hệ thống tập tin của bạn là cơ sở dữ liệu (nghĩa là viết toàn bộ từ điển vào một tệp hoặc viết từng mục vào tệp riêng của nó). Đối với dữ liệu lớn, tôi thường chọn biểu diễn từ điển làm thư mục trên hệ thống tập tin của mình và mỗi mục là một tệp. klepto cũng cung cấp một loạt các thuật toán lưu trữ (như

>>> from klepto.archives import dir_archive
>>> # does not hold entries in memory, each entry will be stored on disk
>>> demo = dir_archive('demo', {}, serialized=True, cached=False)
>>> demo['a'] = 10
>>> demo['b'] = 20
>>> demo['c'] = min
>>> demo['d'] = [1,2,3]
3,
>>> from klepto.archives import dir_archive
>>> # does not hold entries in memory, each entry will be stored on disk
>>> demo = dir_archive('demo', {}, serialized=True, cached=False)
>>> demo['a'] = 10
>>> demo['b'] = 20
>>> demo['c'] = min
>>> demo['d'] = [1,2,3]
4,
>>> from klepto.archives import dir_archive
>>> # does not hold entries in memory, each entry will be stored on disk
>>> demo = dir_archive('demo', {}, serialized=True, cached=False)
>>> demo['a'] = 10
>>> demo['b'] = 20
>>> demo['c'] = min
>>> demo['d'] = [1,2,3]
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.

>>> from klepto.archives import dir_archive
>>> d = {'a':1, 'b':2, 'c':map, 'd':None}
>>> # map a dict to a filesystem directory
>>> demo = dir_archive('demo', d, serialized=True) 
>>> demo['a']
1
>>> demo['c']
<built-in function map>
>>> demo          
dir_archive('demo', {'a': 1, 'c': <built-in function map>, 'b': 2, 'd': None}, cached=True)
>>> # is set to cache to memory, so use 'dump' to dump to the filesystem 
>>> demo.dump()
>>> del demo
>>> 
>>> demo = dir_archive('demo', {}, serialized=True)
>>> demo
dir_archive('demo', {}, cached=True)
>>> # demo is empty, load from disk
>>> demo.load()
>>> demo
dir_archive('demo', {'a': 1, 'c': <built-in function map>, 'b': 2, 'd': None}, cached=True)
>>> demo['c']
<built-in function map>
>>> 

klepto cũng cung cấp việc sử dụng các phụ trợ tệp được ánh xạ bộ nhớ, cho đọc nhanh. Có những lá cờ khác như

>>> from klepto.archives import dir_archive
>>> # does not hold entries in memory, each entry will be stored on disk
>>> demo = dir_archive('demo', {}, serialized=True, cached=False)
>>> demo['a'] = 10
>>> demo['b'] = 20
>>> demo['c'] = min
>>> demo['d'] = [1,2,3]
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ờ
>>> from klepto.archives import dir_archive
>>> # does not hold entries in memory, each entry will be stored on disk
>>> demo = dir_archive('demo', {}, serialized=True, cached=False)
>>> demo['a'] = 10
>>> demo['b'] = 20
>>> demo['c'] = min
>>> demo['d'] = [1,2,3]
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.

>>> from klepto.archives import dir_archive
>>> # does not hold entries in memory, each entry will be stored on disk
>>> demo = dir_archive('demo', {}, serialized=True, cached=False)
>>> demo['a'] = 10
>>> demo['b'] = 20
>>> demo['c'] = min
>>> demo['d'] = [1,2,3]

Nhận klepto tại đây: https://github.com/uqfoundation

So sánh CSV, Pickle, Parquet, Feather và HDF5

Hì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].

Đị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à không nhớ các loại dữ liệu trừ khi được nói rõ ràng.

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ẩn

Vớ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

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
0 và
# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
1 bị bỏ qua cho ví dụ này vì Parquet không hỗ trợ
# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
0 và HDF5 với
# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
3 không hỗ trợ
# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
1. Để 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ệp

Trong 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à

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
5.

Trong bài viết này, chúng tôi sẽ sử dụng nén GZIP.

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"

Dưa chua

Mô-đun

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
6 thực hiện các giao thức nhị phân để tuần tự hóa và khử tự động cấu trúc đối tượng Python. [7]

Phần mở rộng tệp là

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
7.

Trong bài viết này, chúng tôi sẽ sử dụng nén GZIP.

# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"

Dưa chua

Mô-đun

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
6 thực hiện các giao thức nhị phân để tuần tự hóa và khử tự động cấu trúc đối tượng Python. [7]

Phần mở rộng tệp là

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
7.

Sàn gỗ

# Reading
df = pd.read_parquet(file_name)
# Writing
df.to_parquet(file_name,
engine = "pyarrow",
compression = ...) # None or "gzip"

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]

Phần mở rộng tệp là

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
8.

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
df = pd.read_feather(file_name)
# Writing
df.to_feather(file_name,
compression = ...) # None or "zstd"

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]

Phần mở rộng tệp là

# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
9.

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 là mô hình dữ liệu, thư viện và định dạng tệp để lưu trữ và quản lý dữ liệu. Nó hỗ trợ một loạt các loại dữ liệu không giới hạn, và được thiết kế cho I/O linh hoạt và hiệu quả và cho dữ liệu khối lượng và dữ liệu phức tạp cao. HDF5 có thể di động và có thể mở rộng, cho phép các ứng dụng phát triển trong việc sử dụng HDF5. [5]
  • Phần mở rộng tệp là
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    0.

HDF5 có hai tùy chọn định dạng:

# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"
1, nhanh chóng viết [6]

# Reading
df = pd.read_hdf(file_name)
# Writing
df.to_hdf(file_name,
key = "df",
format = ..., # "fixed" or "table"
complib = ..., # None or "zlib"
complevel = 9)

# 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

# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"
3.

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.

  • So sánh thời gian viết cho các định dạng tệp khác nhau (hình ảnh của tác giả thông qua Kaggle)CSV the writing takes the longest
  • Đầu tiên, hãy để giải quyết vấn đề con voi trong phòng: nén làm tăng thời gian ghi của bất kỳ định dạng tệp nào. Nhưng điều này không đáng ngạc nhiên vì việc nén dữ liệu là một nhiệm vụ bổ sung trong quá trình viết. uncompressed writing times
  • Ngoài ra, chúng ta có thể thực hiện các quan sát sau:writing time for both uncompressed and compressed files
  • Như mong đợi, đối với CSV, văn bản mất nhiều thời gian nhấtHDF5 with
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    4 is faster than
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    5, but with compression HDF5 with
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    6 is similar to
    # Reading
    df = pd.read_csv(file_name,
    dtype = {...})
    # Writing
    df.to_csv(file_name,
    index = False,
    compression = ...) # None or "gzip"
    3

Lông và Parquet có thời gian viết nhanh nhất

Feather 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
# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"
4 nhanh hơn
# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"
5, nhưng với nén HDF5 với
# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"
6 tương tự như
# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
3

Kích thước tập tin

  • Dưới đây, bạn có thể thấy kích thước tệp kết quả cho mỗi định dạng tệp. Các thanh màu đen rắn biểu thị kích thước tệp cho các tệp không nén, trong khi các thanh băm biểu thị kích thước tệp cho các tệp được nén.compressed files are smaller than the uncompressed files
  • So sánh kích thước tệp cho các định dạng tệp khác nhau (hình ảnh của tác giả thông qua Kaggle) file
  • Chúng ta có thể thực hiện các quan sát sau:file
  • Đúng như dự đoán, các tệp được nén nhỏ hơn các tệp không nén
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    5 are the smallest compressed files

CSV là tệp lớn nhất

Lọc là tệp nhỏ nhất không nén

Parquet và HDF5 với
# Reading
df = pd.read_pickle(file_name)
# Writing
df.to_pickle(file_name,
compression = ...) # None or "gzip"
5 là các tệp nén nhỏ nhất

Kích thước tập tin

  • Dưới đây, bạn có thể thấy kích thước tệp kết quả cho mỗi định dạng tệp. Các thanh màu đen rắn biểu thị kích thước tệp cho các tệp không nén, trong khi các thanh băm biểu thị kích thước tệp cho các tệp được nén.CSV the reading takes the longes
  • Pickle và HDF5 với
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    4 có thời gian đọc nhanh nhất cho cả các tệp không nén và nén
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    4 have the fastest reading times for both uncompressed and compressed files
  • Đúng như dự đoán, HDF5 với
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    4 nhanh hơn
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    5, cũng với nénHDF5 with
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    4 is faster than
    # Reading
    df = pd.read_pickle(file_name)
    # Writing
    df.to_pickle(file_name,
    compression = ...) # None or "gzip"
    5, also with compression

Điều khoản khác

Bê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

# Reading
df = pd.read_parquet(file_name)
# Writing
df.to_parquet(file_name,
engine = "pyarrow",
compression = ...) # None or "gzip"
2 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à

# Reading
df = pd.read_parquet(file_name)
# Writing
df.to_parquet(file_name,
engine = "pyarrow",
compression = ...) # None or "gzip"
3, tất cả các phao được đọc là
# Reading
df = pd.read_parquet(file_name)
# Writing
df.to_parquet(file_name,
engine = "pyarrow",
compression = ...) # None or "gzip"
4 và
# Reading
df = pd.read_parquet(file_name)
# Writing
df.to_parquet(file_name,
engine = "pyarrow",
compression = ...) # None or "gzip"
5 và
# Reading
df = pd.read_csv(file_name,
dtype = {...})
# Writing
df.to_csv(file_name,
index = False,
compression = ...) # None or "gzip"
1 được đọc là
# Reading
df = pd.read_parquet(file_name)
# Writing
df.to_parquet(file_name,
engine = "pyarrow",
compression = ...) # None or "gzip"
7. 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:

Đây là định dạng tốt nhất để xử lý các bộ dữ liệu lớn?

- Nó phụ thuộc vào trường hợp sử dụng của bạn nhưng có lẽ không phải CSV

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.

Rốt cuộc, CSV không quá tệ. Để nó một mình!"

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.