避免在不同的python内核之间重新加载DataFrame


10

有没有一种方法可以在内存中保留变量(大表/数据框)并在多个ipython笔记本之间共享?

我会寻找某种在概念上类似于MATLAB的持久变量的东西。可以从多个单独的编辑器(笔记本)中调用自定义函数/库,并使该外部函数缓存某些结果(或大表)。

通常,我想避免重新加载使用频繁的表(该表是通过从笔记本调用的自定义库加载的),因为每当我开始新的分析时,读取它大约需要2-3分钟。


1
这似乎是不可能的,如果您不小心,可能会引起很多头痛。是否无法将数据持久保存为msgpack之类的有效格式?
Emre

@Emre谢谢。msgpack的一个棘手部分是它不能解决需要读取表的潜在问题。这也是一把双刃剑:虽然与表格的原始格式相比,它节省了大约40%的时间,但它也使手动分析与原始数据仅相距一小步(不太干净)
tsttst

我认为最好的选择是像redis这样的缓存,可以与msgpack结合使用。至少您可以坚持使用内存而不是磁盘。
Emre

1
我会考虑使用羽毛 -这是非常
MaxU

1
Spark和它的缓存是否可以选择?从本质上讲,您只能在笔记本中使用Spark进行初始读取/处理
Dolan Antenucci

Answers:


4

如果这对您的用例很重要,则可以尝试切换到Apache Zeppelin。由于那里的所有Spark笔记本共享相同的Spark上下文,相同的Python运行环境。 https://zeppelin.apache.org/

因此,您要问的是发生在齐柏林飞艇上的事情。或者说完整点,可以选择在所有Spark笔记本之间共享相同的Spark上下文/相同的Python环境(在Zeppelin中被称为“笔记”):

Zeppelin中的Spark口译员共享选项

因此,您可以选择全局共享上下文(默认的Zeppelin行为),每个便笺(唯一可能的Jupyter行为)或每个用户。

如果您不能/不想切换到齐柏林飞艇,请使用以下方法查看在笔记本之间共享通用数据帧的其他选项:

ps。到目前为止,您无法将ipynb文件导入到Zeppelin(它拥有自己的笔记本格式存储为json文件),直到实现https://issues.apache.org/jira/browse/ZEPPELIN-1793为止;尽管在大多数情况下手动转换它们并不难。


1
谢谢。我可能会放弃使用ipython / jupyter笔记本。齐柏林飞艇是否支持仅共享定义变量的内容,而不共享不同编辑器/笔记本/便笺中任何同名变量的可能性?(就像MATLAB一样)
tsttst

不幸的是-不,它是在过程级别进行控制的。因此,要么全部要么一无所有。如果选择“每注”,它将与Jupyter中的行为相同。如果选择“全局”,他们将共享所有内容。我们通常使用Globally,因为它消耗的资源较少,尤其是在多用户环境中。已有一段时间没有使用Matlab,但是如果您只需要共享所选变量,则可以使用Apache Arrow或Feather(如果是Jupyter或Zeppelin)。
塔加尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.