Tránh tải lại DataFrame giữa các nhân python khác nhau


10

Có cách nào để giữ một biến (bảng lớn / khung dữ liệu) trong bộ nhớ và chia sẻ nó trên nhiều sổ ghi chép ipython không?

Tôi đang tìm kiếm một cái gì đó, tương tự về mặt khái niệm với các biến liên tục của MATLAB. Ở đó có thể gọi một chức năng / thư viện tùy chỉnh từ nhiều trình soạn thảo riêng lẻ (sổ ghi chép) và có chức năng bên ngoài đó lưu trữ một số kết quả (hoặc bảng lớn).

Hầu như tôi muốn tránh tải lại một bảng được sử dụng nhiều (được tải thông qua một thư viện tùy chỉnh được gọi từ sổ ghi chép), vì đọc nó mất khoảng 2-3 phút mỗi khi tôi bắt đầu phân tích mới.


1
Điều này dường như là không thể, và nó có thể gây ra nhiều đau đầu nếu bạn không cẩn thận. Có phải việc lưu giữ dữ liệu ở định dạng hiệu quả như là tệp tin không phải là một tùy chọn?
Emre

@Emre Cảm ơn bạn. Một phần khó khăn với Trình thông báo là nó không giải quyết được vấn đề cơ bản là cần phải đọc bảng. Ngoài ra, nó là con dao hai lưỡi: Mặc dù nó tiết kiệm khoảng 40% thời gian so với định dạng ban đầu của bảng, nó cũng đặt phân tích thủ công cách một bước nhỏ so với dữ liệu gốc (ít sạch hơn)
vào

Tôi nghĩ rằng tùy chọn tốt nhất là một bộ đệm như redis, có thể được sử dụng cùng với Trình đóng gói. Ít nhất bạn có thể kiên trì vào bộ nhớ thay vì đĩa.
Emre

1
Tôi sẽ cân nhắc sử dụng Feather - nó rất nhanh
MaxU

1
Spark và bộ nhớ đệm sẽ là một lựa chọn? Về cơ bản, bạn sẽ bị hạn chế sử dụng Spark trong sổ ghi chép của mình để thực hiện việc đọc / xử lý ban đầu
Dolan Antenucci

Câu trả lời:


4

Nếu nó quan trọng đối với các trường hợp sử dụng của bạn, bạn có thể thử chuyển sang Apache Zeppelin. Vì tất cả các máy tính xách tay Spark ở đó đều có chung bối cảnh Spark, cùng một môi trường chạy Python. https://zeppelin.apache.org/

Vì vậy, những gì bạn đang hỏi xảy ra tự nhiên trong Zeppelin. Hoặc để hoàn thành, đây là một tùy chọn để chia sẻ cùng một bối cảnh Spark / cùng một chế độ Python giữa tất cả các máy tính xách tay Spark (chúng được gọi là 'ghi chú' trong Zeppelin):

Tùy chọn chia sẻ thông dịch viên Spark trong Zeppelin

Vì vậy, bạn có thể chọn chia sẻ bối cảnh Toàn cầu (hành vi mặc định của Zeppelin), Per Note (hành vi duy nhất có thể của Jupyter) hoặc Mỗi người dùng.

Nếu bạn không thể / không muốn chuyển sang Zeppelin, hãy xem các tùy chọn khác để chia sẻ các tệp dữ liệu chung giữa các sổ ghi chép của bạn bằng cách sử dụng:

ps. Hiện tại, bạn không thể nhập tệp ipynb vào Zeppelin (hiện tại nó có định dạng sổ ghi chép riêng được lưu dưới dạng tệp json), cho đến khi https://issues.apache.org/jira/browse/ZEPPELIN-1793 được triển khai; mặc dù không khó để chuyển đổi chúng bằng tay trong hầu hết các trường hợp.


1
Cảm ơn bạn. Tôi có thể sẽ chuyển từ máy tính xách tay ipython / jupyter. Zeppelin có hỗ trợ khả năng chỉ chọn lọc chia sẻ nội dung của các biến được xác định, nhưng không có bất kỳ biến có tên giống hệt nào trong các trình soạn thảo / sổ ghi chép / ghi chú khác nhau không? (giống như MATLAB vậy)
vào

Thật không may - không, nó được kiểm soát ở cấp độ quy trình. Vì vậy, đó là tất cả hoặc không có gì. Nếu bạn chọn Per Note, đó sẽ là hành vi tương tự như trong Jupyter. Nếu bạn chọn Globally, họ sẽ chia sẻ mọi thứ. Chúng tôi thường sử dụng Globally vì nó ít sử dụng tài nguyên hơn, đặc biệt là trong môi trường nhiều người dùng. Không sử dụng Matlab trong một thời gian, nhưng nếu bạn phải chia sẻ chỉ các biến được chọn - bạn có thể xem Apache Arrow hoặc Feather, nếu đó là Jupyter hoặc Zeppelin.
Tagar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.