使用weka过程中遇到java.lang.NoClassDefFoundError,应该如何解决?

问题背景:

我在jupyter notebook中通过python-weka-wrapper3调用weka,原来一直可以正常使用。

在解决一个问题时,由于数据量较大,故使用multiprocessing包的Pool()进行并行计算。这时遇到了java.lang.NoClassDefFoundError错误。

系统:ubuntu

python-weka-wrapper3版本:0.1.16

python版本:3.6

 

报错信息如下:

我的代码如下:

from multiprocessing import Pool

pool = Pool(processes=10)

result = pool.map(score, permut)

pool.close()

pool.join()

——其中score函数调用weka中的类库,permut给出的是score的参数数组,也是在运行 pool.map()时出现了上面的报错信息

——另外,单独运行score函数,即不进行并行计算时,score函数可以正常输出结果

 

本人是计算机菜鸟,比较少提问,如果上述的问题有什么不清晰的地方或者有什么信息需要补充的话,请不吝赐教。

 

 

看错误应该是环境问题。

启动进程并行计算时,子进程的环境配置往往和主进程不一样。这应该也是你非并行时不报错的原因。

解决子进程环境问题应该就可以解决你的问题了。

给你提供点解决思路

1. 找到启动子进程的启动命令,可以用ps命令看

2. 直接执行启动命令,看是否可以正常运行

这个报错是 并行计算的问题,并不是weka类库的问题。

multiprocessing.Pool 只是用来启动多个进程而不是在每个core上启动一个进程,其实就是cpu个数。

map()  是Pool类中的map方法,与内置的map函数用法基本一致,它会使进程阻塞直到结果返回

你把processes数量降低试试看