Tôi có một tập tin csv ~ 50GB mà tôi phảiĐẩy nhanh tiến độ xử lý ánh sáng của ~ 50GB tập tin CSV
- Đi vài tập con của các cột của CSV
- Áp dụng một đặc điểm kỹ thuật chuỗi định dạng khác nhau để mỗi tập hợp con cột của CSV.
- Xuất CSV mới cho từng tập hợp con với thông số định dạng của riêng nó.
Tôi đã chọn sử dụng Pandas và có cách tiếp cận chung để lặp qua các đoạn có kích thước nhỏ gọn (chỉ hơn nửa triệu dòng) để tạo DataFrame và thêm đoạn mã vào mỗi CSV đầu ra. Vì vậy, một cái gì đó như thế này:
_chunk_size = 630100
column_mapping = {
'first_output_specification' : ['Scen', 'MS', 'Time', 'CCF2', 'ESW10'],
# ..... similar mappings for rest of output specifications
}
union_of_used_cols = ['Scen', 'MS', 'Time', 'CCF1', 'CCF2', 'VS', 'ESW 0.00397', 'ESW0.08',
'ESW0.25', 'ESW1', 'ESW 2', 'ESW3', 'ESW 5', 'ESW7', 'ESW 10', 'ESW12',
'ESW 15', 'ESW18', 'ESW 20', 'ESW22', 'ESW 25', 'ESW30', 'ESW 35',
'ESW40']
chnk_iter = pd.read_csv('my_big_csv.csv', header=0, index_col=False,
iterator=True, na_filter=False, usecols=union_of_used_cols)
cnt = 0
while cnt < 100:
chnk = chnk_iter.get_chunk(_chunk_size)
chnk.to_csv('first_output_specification', float_format='%.8f',
columns=column_mapping['first_output_specification'],
mode='a',
header=True,
index=False)
# ..... do the same thing for the rest of the output specifications
cnt += 1
Vấn đề của tôi là rằng đây là thực sự chậm. Mỗi đoạn sẽ mất khoảng một phút để tạo thêm phụ lục cho các tệp CSV, và do đó tôi xem xét gần 2 giờ để hoàn thành nhiệm vụ.
Tôi đã cố gắng đặt một vài tối ưu hóa bằng cách chỉ sử dụng liên kết của các tập hợp con cột khi đọc trong CSV, cũng như thiết lập na_filter=False
, nhưng vẫn không được chấp nhận. Tôi đã tự hỏi liệu có cách nào nhanh hơn để thực hiện việc xử lý ánh sáng của một tệp CSV bằng Python, hoặc bằng cách tối ưu hóa hoặc hiệu chỉnh theo cách tiếp cận của tôi hoặc có lẽ chỉ đơn giản là có một công cụ tốt hơn phù hợp cho loại công việc này sau đó Pandas ... với tôi (một người dùng Pandas thiếu kinh nghiệm) điều này có vẻ như nó nhanh như nó có thể nhận được với Pandas, nhưng tôi rất có thể bị nhầm lẫn.
Có thể chuyển sang phương pháp tiếp cận cơ sở dữ liệu không? Đây là một tệp csv lớn! –
@ Jylo Tôi thực sự mong rằng đó là trường hợp, nhưng không. –
'Chunksize' có chứa số hàng bạn muốn có trong mỗi đoạn không? – albert