Jupyter Notebook-未使用Numba和Dask定义的全局名称

时间:2019-07-15 18:14:30

标签: jupyter-notebook dask numba

在尝试并行处理大量图像时,我遇到了一个错误,但找不到任何有关它的信息。仅当我在Jupyter Notebook上运行代码时,才会出现该错误。在python文件中,还有另一个错误,我在关于PyTorch的主题上找到了针对此问题的修复程序。

代码段代码如下:

单元格

import numba
import numpy as np
import pandas as pd
import time

import dask.dataframe as dd
from dask.multiprocessing import get
from multiprocessing import cpu_count

单元格2

def f1(x):
    return x + 1

@numba.jit
def f2(x):
    x1 = f1(x)
    time.sleep(0.05)
    return x1, x

@numba.jit
def f3(x):
    a, b = f2(x)
    time.sleep(0.1)
    return a + b

def f4(x, y):
    return f3(x) + y

cell3

nCores = 4 #cpu_count()

df = pd.DataFrame(np.random.randint(0, 100 , size=(100, 2)), columns=["A", "B"])

res = dd.from_pandas(df, npartitions=nCores).\
   map_partitions(
      lambda df_ : df_.apply(
         lambda x : f4(x.A, x.B), axis=1)).\
   compute(get=get)

print(res)

如果需要在单元3 著名的if __name__ == "__main__" :

的内容之前在python脚本上运行此代码

,但这在笔记本电脑上不起作用。返回的错误是:

  

NameError :(“未定义全局名称'f2'”,“发生在索引50”)

这些是我已经做过的一些试验:

  • 如果我删除了@numba.jit,它会起作用
  • 如果我在@numba.jit上使用标准大熊猫,它会起作用。
  • 如果两者都存在,则失败

有人知道如何在Jupyter Notebook的特定情况下解决此问题吗?

先谢谢了

尼古拉斯

0 个答案:

没有答案