Tôi có một khung dữ liệu gồm hơn 100.000 hàng và mỗi hàng có 100.000 cột, hoàn toàn với 10.000.000.000 giá trị nổi.Có phải lưu một khung dữ liệu rộng lớn vào sàn gỗ không?
Tôi đã đọc chúng trước đây trong một tệp csv
(được phân tách bằng tab) và tôi đã đọc thành công chúng với máy Xeon 50 lõi với bộ nhớ 250 GB RAM và cố gắng viết ra như một thư mục .parq
như sau:
Các phao nổi trong huge.csv
được lưu dưới dạng chuỗi và là 125GB.
import dask.dataframe as dd
filename = 'huge.csv'
df = dd.read_csv(filename, delimiter='\t', sample=500000000)
df.to_parquet('huge.parq')
Nó đã được văn bản cho huge.parq
cho gần một tuần và thư mục là 14GB và nó có vẻ như quá trình tiết kiệm .to_parquet
sẽ không dừng lại bất cứ lúc nào sớm.
Và free -mh
cho thấy rằng vẫn còn nhớ lại sẵn nhưng thời gian nó lấy để lưu các thư mục .parq
là rất chậm:
$ free -mh
total used free shared buff/cache available
Mem: 251G 98G 52G 10M 101G 152G
Swap: 238G 0B 238G
Các câu hỏi là:
Với kích thước của các dataframe và máy tính, là nó khả thi để lưu các dataframe dask vào một tập tin gỗ ở tất cả?
Có bình thường đối với
dask
vàfastparquet
mất quá nhiều thời gian để lưu các khung dữ liệu khổng lồ không?Có cách nào để ước tính thời gian cần thiết để lưu tệp sàn gỗ không?
10e9 giá trị nổi không có vẻ lớn đối với tôi. 1e5 cột mặc dù. Bạn đã cân nhắc sử dụng dask.array và HDF5 chưa? Đây có thể là phù hợp hơn để chặn trong cả hai chiều. – MRocklin
Có một lý do tại sao dask.array và HDF5 là tốt hơn cho dataframes với >>> không.cột? "Chặn" là gì? – alvas
Có bao nhiêu hàng trên mỗi phân vùng? read_csv chia nhỏ số byte, vì vậy tôi mong đợi một số nhỏ. Đối với mỗi cột của mỗi phân vùng, có một phần siêu dữ liệu riêng biệt phải tồn tại, làm cho siêu dữ liệu của bạn lớn hơn bất kỳ thứ gì tôi đã thấy trước đây - nhưng tôi hy vọng nó hoạt động. Để lưu trữ các mảng nổi 100kx100k giống như mảng, tôi thực sự khuyên bạn nên [zarr] (http://zarr.readthedocs.io/en/latest/). – mdurant