我正在尝试在满帧数据的框架上使用简单的应用程序。这是对应用函数的一个列进行简单的数据转换,该函数接受文本输入并将其拆分为列表。这是函数及其调用/输出:
In [1]: def count_words(txt):
count = Counter()
for word in txt.split():
count[word]+=1
return count
In [2]: products.apply(lambda x: count_words(x['review']))
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-8-85338326302c> in <module>()
----> 1 products.apply(lambda x: count_words(x['review']))
C:\Anaconda3\envs\dato-env\lib\site-packages\graphlab\data_structures\sframe.pyc in apply(self, fn, dtype, seed)
2607
2608 with cython_context():
-> 2609 return SArray(_proxy=self.__proxy__.transform(fn, dtype, seed))
2610
2611 def flat_map(self, column_names, fn, column_types='auto', seed=None):
C:\Anaconda3\envs\dato-env\lib\site-packages\graphlab\cython\context.pyc in __exit__(self, exc_type, exc_value, traceback)
47 if not self.show_cython_trace:
48 # To hide cython trace, we re-raise from here
---> 49 raise exc_type(exc_value)
50 else:
51 # To show the full trace, we do nothing and let exception propagate
RuntimeError: Runtime Exception. Unable to evaluate lambdas. Lambda workers did not start.
当我运行我的代码时,我得到了那个错误。 s帧(df)只有10乘2,因此不应有过载。我不知道如何解决这个问题。
答案 0 :(得分:1)
如果您正在使用GraphLab Create,那么实际上有一个内置工具可以在&#34;文本分析&#34;工具包。我们说我的数据如下:
import graphlab
products = graphlab.SFrame({'review': ['a portrait of the artist as a young man',
'the sound and the fury']})
计算每个条目中单词的最简单方法是
products['counts'] = graphlab.text_analytics.count_words(products['review'])
如果您单独使用sframe包,或者如果您想要执行自己所描述的自定义功能,我认为您的代码中的关键缺失部分是Counter需要转换为字典,以便SFrame处理输出。
from collections import Counter
def count_words(txt):
count = Counter()
for word in txt.split():
count[word] += 1
return dict(count)
products['counts'] = products.apply(lambda x: count_words(x['review']))
答案 1 :(得分:1)
对于在使用graphlab时遇到此问题的任何人,这是关于dato支持问题的讨论主题:
以下是可以运行的代码,以便根据具体情况提供此问题。
在Dato / Graphlab环境中启动ipython或ipython笔记本之后,但在导入graphlab之前,请复制并运行以下代码
import ctypes, inspect, os, graphlab
from ctypes import wintypes
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
kernel32.SetDllDirectoryW.argtypes = (wintypes.LPCWSTR,)
src_dir = os.path.split(inspect.getfile(graphlab))[0]
kernel32.SetDllDirectoryW(src_dir)
# Should work
graphlab.SArray(range(1000)).apply(lambda x: x)
如果运行此选项,则apply函数应与sframe一起使用。