Уникайте перезавантаження DataFrame між різними ядрами python


10

Чи існує спосіб збереження змінної (велика таблиця / кадр даних) у пам’яті та обміну нею в декількох ноутбуках ipython?

Я б шукав щось, що концептуально схоже на постійні змінні MATLAB. Там можна викликати користувальницьку функцію / бібліотеку з декількох окремих редакторів (зошитів) і мати цю зовнішню функцію кешувати деякий результат (або велику таблицю).

Здебільшого я хотів би уникати перезавантаження широко використовуваної таблиці (яка завантажується через користувальницьку бібліотеку, яку називають із зошитів), оскільки читання займає приблизно 2-3 хвилини, коли я починаю новий аналіз.


1
Це здається неможливим, і це може спричинити багато головних болів, якщо ви не будете обережні. Чи збереження даних у такому ефективному форматі, як msgpack, не є можливим?
Емре

@Emre Дякую Складна частина з msgpack полягає в тому, що вона не вирішує основну проблему необхідності читати таблицю. Крім того, це меч з двома кінцями: хоча він заощаджує близько 40% часу в порівнянні з оригінальним форматом таблиці, він також подає вручну аналіз на один невеликий крок від вихідних даних (який менш чистий)
tsttst

Я думаю, що найкращим варіантом є кеш на зразок redis, який можна використовувати спільно з msgpack. Принаймні, ви можете зберігати пам'ять замість диска.
Емре

1
Я б розглядав можливість використання Перо - це дуже швидко
MaxU

1
Буде іскровим, і кешування буде варіантом? По суті, ви обмежуєтесь використанням Spark у своїх блокнотах, хоча для початкового читання / обробки
Dolan Antenucci

Відповіді:


4

Якщо це важливо для ваших випадків використання, ви можете спробувати перейти на Apache Zeppelin. Як і всі ноутбуки Spark, вони мають однаковий контекст Spark, те саме середовище управління Python. https://zeppelin.apache.org/

Отже, те, що ви запитуєте, відбувається вродже в Цеппеліні. Або для завершення, це можливість поділити один і той же контекст Spark / те саме оточення Python між усіма ноутбуками Spark (у Zeppelin вони називаються "нотатками"):

Параметри обміну іскрових перекладачів у Zeppelin

Таким чином, ви можете вибрати загальний доступ до контексту (поведінка Zeppelin за замовчуванням), Per Note (єдино можлива поведінка Юпітера) або на користувача.

Якщо ви не можете / не хочете перейти на Zeppelin, перегляньте інші варіанти обміну загальними рамками даних між вашими ноутбуками, використовуючи:

пс. На даний момент ви не можете імпортувати файли ipynb до Zeppelin (у нього є власний формат ноутбука, який зберігається у файлі json), поки не буде впроваджено https://isissue.apache.org/jira/browse/ZEPPELIN-1793 ; хоча в більшості випадків конвертувати їх вручну не так складно.


1
Дякую. Я, мабуть, перейду від ноутбуків ipython / jupyter. Чи підтримує zeppelin можливість вибірково ділитися лише вмістом визначених змінних, але не будь-якої однаково названої змінної в різних редакторах / зошитах / примітках? (як MATLAB робить)
tsttst

Нечутно - ні, це контролюється на рівні процесу. Так це все або нічого. Якщо ви вибрали за ноту, це буде та сама поведінка, що і у Юпітера. Якщо ви виберете глобально, вони поділять все. Ми, як правило, використовуємо глобально, оскільки це менш затребуване ресурсів, особливо в середовищі для багатьох користувачів. Не використовував Matlab деякий час, але якщо вам доведеться робити спільний доступ лише для вибраних змінних - ви можете подивитися на стрілку або перо Apache, якщо це Юпітер або Цепелін.
Тагар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.