Làm cách nào để phân tích nhiều đối tượng JSON trong Python?
Nếu bạn đã đọc bài đăng trên blog đầu tiên, thì bạn đã học được một số mẹo và thủ thuật về cách xử lý một tệp JSON lớn trong Python. Trong phần này, tôi muốn tập trung vào cách làm việc hiệu quả với nhiều tệp JSON Show
Như đã đề xuất, tốt hơn là đọc tệp JSON qua Pandas, sử dụng phương thức read_json() và chuyển tham số chunksize, để chỉ tải và thao tác một số lượng hàng nhất định tại một thời điểm. Phương thức sẽ không trả về khung Dữ liệu mà là đối tượng JsonReader để lặp lại. Để truy cập nội dung tệp và tạo khung dữ liệu Pandas, bạn có thể sử dụng 1) gấu trúc. concat [1]interactions_data_frames = [] for interactions_input_file in json_files: interactions_temp = pd.concat(pd.read_json(interactions_input_folder+'/'+interactions_input_file, orient='records', lines=True, chunksize=chunk_value)) interactions_data_frames.append(interactions_temp) interactions = pd.concat(interactions_data_frames, ignore_index=True, sort=True) 2) Đối với vòng lặp interactions_data_frames = [] for interactions_input_file in json_files: interactions_temp = pd.read_json(interactions_input_folder + '/' + interactions_input_file, GIẢI THÍCH MÃ
Bạn cũng có thể chơi với giá trị của tham số chunksize cho đến khi đạt được sự cân bằng tốt; . Cụ thể, chúng tôi nhận thấy rằng khối càng lớn thì phân tích cú pháp càng nhanh và mức sử dụng bộ nhớ càng cao. Sau đó, bạn có thể thử thử nghiệm và đạt được mức sử dụng bộ nhớ và thời gian phân tích có thể chấp nhận được. Trong trường hợp của chúng tôi với giá trị chunksize là 10000, chúng tôi đã đạt được một thỏa hiệp tốt Tại đây bạn có thể tìm thấy một số cuộc thảo luận cộng đồng về chủ đề này [2], [3] Nhiều tệp nhỏ so với vài tệp lớnKhi làm việc với JSON, sẽ tốt hơn nếu có nhiều tệp nhỏ hay ít tệp lớn? Để giải thích điều tôi muốn nói, hãy tưởng tượng có thương mại điện tử Chúng tôi thu thập tất cả các tương tác mà người dùng có với các sản phẩm của trang web và lưu chúng vào nhật ký JSON. Sau đó, chúng tôi phải đọc tất cả các tệp này bằng Python, thao tác với chúng và tạo các bộ đào tạo và kiểm tra để đào tạo mô hình Học để xếp hạng. Chúng tôi định cấu hình hệ thống để cuộn các tệp nhật ký dựa trên ngày/giờ và chúng tôi đưa ra giả thuyết về hai trường hợp khác nhau 1) Cuộn các tệp nhật ký mỗi ngày một lầnVí dụ: mỗi ngày chúng tôi nhận được một nhật ký (khoảng 2GB). tương tác người dùng-2021-06-20. đăng nhập 2) Cuộn các tệp nhật ký cứ sau 15 phútMỗi ngày chúng tôi nhận được 96 nhật ký (khoảng 20 MB mỗi nhật ký), chẳng hạn. Chúng tôi sẽ có khoảng 2GB dữ liệu trong cả hai trường hợp, nhưng chúng tôi tự hỏi liệu sẽ tốt hơn nếu quản lý một tệp lớn hay một số tệp nhỏ về thời gian và mức sử dụng bộ nhớ Chúng tôi đã thử nghiệm quy trình sử dụng cả hai phương pháp trên dữ liệu tương tác của người dùng trong nửa tháng để mô phỏng một ứng dụng trong thế giới thực Dưới đây là sự khác biệt giữa phân tích cú pháp nhiều tệp nhỏ và một vài tệp lớn Phân tích tệp json 27 GB mất khoảng 40 phút và mức sử dụng bộ nhớ khung dữ liệu là khoảng 60 GB
Khung dữ liệu hàm Pandas. info() [4] được sử dụng để in thông tin tóm tắt về khung dữ liệu. Nó bao gồm tên cột, số lượng không null và dtype. Tham số memory_usage chỉ định xem có nên hiển thị tổng mức sử dụng bộ nhớ của các thành phần khung dữ liệu (bao gồm cả chỉ mục) hay không. Giá trị 'deep' sẽ thực hiện tính toán mức sử dụng bộ nhớ thực
ĐẦU RA
Để ghi lại hoạt động của CPU và bộ nhớ của toàn bộ quy trình Python, chúng tôi đã sử dụng tiện ích có tên là psrecord [5] cho phép chúng tôi lưu trữ dữ liệu vào một tệp hoặc vẽ nó trong biểu đồ
ở đâu
Từ các thử nghiệm của mình, chúng tôi nhận thấy rằng khi chúng tôi có một lượng dữ liệu đáng kể và hầu hết các tính năng là phân loại (đối tượng), mức sử dụng RAM sẽ gấp 5 lần so với các tệp gốc (về mức sử dụng dung lượng ổ đĩa gốc). Trong trường hợp của chúng tôi, kích thước của tệp gốc là 27 GB, mức sử dụng bộ nhớ khung dữ liệu là 60. 2 GB và mức sử dụng bộ nhớ tiến trình là khoảng 129 GB Quá nhiều đối tượngHãy xem điều gì sẽ xảy ra nếu chúng ta loại bỏ tất cả các tính năng của 'đối tượng' khỏi cùng một tập dữ liệu Trước khi chúng tôi có 77 cột bao gồm 45 loại 'đối tượng' (tất cả đều là mảng). Xóa chúng, chúng tôi kết thúc với 32 cột với các loại sau
Dưới đây là sự khác biệt giữa phân tích cú pháp nhiều tệp nhỏ và một vài tệp lớn Trong trường hợp này, việc phân tích tệp json 25 GB mất khoảng 10 phút và mức sử dụng bộ nhớ khung dữ liệu là khoảng 3 GB. Ngay cả việc sử dụng RAM cũng đã giảm đáng kể Đây là bằng chứng cho thấy tập dữ liệu của bạn càng chứa nhiều loại nguyên thủy thì việc phân tích dữ liệu sẽ càng ít ảnh hưởng. Số lượng tính năng của 'đối tượng' càng tăng thì khoảng cách giữa chi phí mà các tệp json ban đầu có trên đĩa và bộ nhớ khung dữ liệu sẽ càng tăng Thực tế là nhiều tệp nhỏ cần ít thời gian hơn nhưng sử dụng nhiều RAM hơn để phân tích cú pháp so với một số tệp lớn vẫn không bị ảnh hưởng Để đơn giản, trong thử nghiệm này, chúng tôi chỉ bỏ các tính năng 'đối tượng' để cho bạn thấy những lợi thế về thời gian và bộ nhớ. Trong một kịch bản trong thế giới thực, chúng ta phải tìm cách chuyển đổi tất cả các cột 'đối tượng' thành các loại tiết kiệm bộ nhớ hơn Trong phần “mẹo & thủ thuật” tiếp theo, chúng ta sẽ thảo luận chi tiết cách giải quyết vấn đề này. Giữ nguyên // dịch vụ của chúng tôi Cắm không biết xấu hổ cho đào tạo và dịch vụ của chúng tôiTôi đã đề cập đến việc chúng tôi thực hiện đào tạo Apache Solr dành cho người mới bắt đầu và Trí tuệ nhân tạo trong Tìm kiếm không? // LUÔN LUÔN CẬP NHẬT Theo dõi bản tin của chúng tôiBạn có thích bài đăng này về Cách quản lý JSON lớn một cách hiệu quả và nhanh chóng không?
Tôi đã đọc và đồng ý Chính sách bảo mật Để trống trường này nếu bạn là người.Có liên quankhoa học dữ liệu tính năng kỹ thuật truy xuất thông tin json pandas python ♥71Tác giả Ilaria PetretiIlaria là một Nhà khoa học dữ liệu đam mê thế giới Trí tuệ nhân tạo. Cô ấy thích áp dụng các kỹ thuật Khai thác dữ liệu và Học máy, tin tưởng mạnh mẽ vào sức mạnh của Dữ liệu lớn và Chuyển đổi số Làm cách nào để phân tích mảng đối tượng JSON trong Python?Để phân tích chuỗi dữ liệu JSON thành đối tượng Python, hãy sử dụng json. loads() của gói dựng sẵn có tên json . json. phương thức loading() phân tích cú pháp chuỗi dữ liệu JSON được cung cấp và trả về một từ điển Python chứa tất cả dữ liệu từ JSON.
Làm cách nào để phân tích cú pháp đối tượng JSON trong Python?Nếu bạn có một chuỗi JSON, bạn có thể phân tích cú pháp chuỗi đó bằng cách sử dụng json. phương thức load() . Kết quả sẽ là một từ điển Python.
JSON có thể chứa nhiều đối tượng không?Bạn có thể truyền một đối tượng JSON để tạo một phần tử hoặc một mảng JSON gồm các đối tượng JSON nhóm để tạo nhiều phần tử .
Làm cách nào để đọc tất cả các tệp JSON trong Python?Đọc tệp JSON bằng Python . Nhập mô-đun json Mở tệp bằng tên của tệp json bằng hàm open() Mở tệp bằng tên của tệp json bằng hàm open() Đọc tệp json bằng load() và đặt dữ liệu json vào một biến |