猿问

IPython.parallel ValueError:无法从内存缓冲区创建对象数组

我正在尝试编写一个要在多个IPython引擎中执行的函数。该函数以pandas系列作为参数。Series的每个元素都是一个字符串,整个Series构成TF.IDF计算的语料库。


阅读IPython并行文档和一些教程之后,这似乎很简单,我想到了以下内容:


import pandas as pd

from IPython.parallel import Client



def calculemus(corpus):

    from sklearn.feature_extraction.text import TfidfVectorizer


    vectorizer = TfidfVectorizer(min_df=1, stop_words='english')


    return vectorizer.fit_transform(corpus)



review = pd.read_csv('review.csv')['text']

review = review.fillna('')


client = Client()


r = client[-1].apply(calculemus, review).get()

但是我却得到了这个错误:


---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)/xxx/site-packages/IPython/zmq/serialize.pyc in unpack_apply_message(bufs, g, copy)

    154                     sa.data = m.bytes

    155 

--> 156     args = uncanSequence(map(unserialize, sargs), g)

    157     kwargs = {}

    158     for k in sorted(skwargs.iterkeys()):

/xxx/site-packages/IPython/utils/newserialized.pyc in unserialize(serialized)

    175 

    176 def unserialize(serialized):

--> 177     return UnSerializeIt(serialized).getObject()

/xxx/site-packages/IPython/utils/newserialized.pyc in getObject(self)

    159                 buf = self.serialized.getData()

    160                 if isinstance(buf, (bytes, buffer, memoryview)):

--> 161                     result = numpy.frombuffer(buf, dtype = self.serialized.metadata['dtype'])

    162                 else:

    163                     raise TypeError("Expected bytes or buffer/memoryview, but got %r"%type(buf))

ValueError: cannot create an OBJECT array from memory buffer

我不确定是什么问题,有人可以启发我吗?


炎炎设计
浏览 288回答 1
1回答

HUH函数

这是IPython 0.13中的错误,应在master中修复。序列化numpy数组有一种特殊情况,可避免复制数据,并且此行为由isinstance(numpy.ndarray)检查触发。这是不恰当的,因为isinstance捕获的子类,其中包括大熊猫对象,但那些大熊猫对象(和阵列的子类中一般)应不以同样的方式进行处理,作为元数据会丢失,并且在另一侧上重建往往会失败。PS:r = client[-1].apply(calculemus, np.array(review, dtype=str)).get()相当于r = client[-1].apply_sync(calculemus, np.array(review, dtype=str))
随时随地看视频慕课网APP

相关分类

Python
我要回答