当前位置: 首页 > 知识库问答 >
问题:

TypeCheckError:FlatMap和ParDo必须返回一个iterable

卫弘义
2023-03-14

我正在创建一个谷歌数据流管道使用Apache梁2. x

基本上,我有一个文本文件,每一行都包含一个英语句子。

我试图调用谷歌NLP(情感)API为每一个新的行/句子。

因此,我有一个调用NLP API的函数:

class CalculateSentiments(beam.DoFn):
  def process(self, element):
    language_client = language.Client()
    pre_text = re.sub('<[^>]*>', '', element)
    text = re.sub(r'[^\w]', ' ', pre_text)
    document = language_client.document_from_text(text)
    sentiment = document.analyze_sentiment().sentiment
    return sentiment.score

我用ParDo为每个句子调用这个函数。我假设,下面的ParDo将自动为文本文件中的每一行调用NLP情感api(基本上我不必遍历文本文件中的每一行!)

output = lines | beam.ParDo(CalculateSentiments())

output | WriteToText(known_args.output)

但在执行html" target="_blank">数据流后,我得到了这个错误:

TypeCheckError:FlatMap和ParDo必须返回一个iterable。结果被退回了。[在运行'ParDo(CalculateSentications)'时]回溯(最近一次调用):
文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache_beam/runners/direct/executor.py”,第297行,调用计算器。进程元素(值)文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache\u beam/runners/direct/transform\u evaluator.py”,第366行,进程元素自身。跑步者进程(元素)文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache_beam/runners/common.py”,第267行,进程内self。重新发布增强(exn)文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache\u beam/runners/common.py”,第263行,进程内自我管理_dofn\u simple\u invoker(element)File“/Users/gsattanthan/.local/lib/python2.7/site packages/apache\u beam/runners/common.py”,第198行,在\u dofn\u simple\u invoker self中_进程输出(element,self.dofn\u进程(element.value))文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache\u beam/typehints/typecheck.py”,第60行,进程内返回self。包装器(self.dofn.process,args,kwargs)文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache_beam/typehints/typecheck.py”,包装器返回self的第84行_检查类型(结果)文件“/Users/gsattanthan/.local/lib/python2.7/site packages/apache\u beam/typehints/typecheck.py”,第98行,检查类型%type(输出))

我做错了什么?我使用Pardo的方式非常类似于Apache光束doco!

有什么想法吗?

共有1个答案

潘刚洁
2023-03-14

实际上,用方括号括住返回变量可以解决这个问题。

现在它是有意义的,为什么错误说它需要是可编辑的!

返回[情绪.得分]

 类似资料:
  • 问题内容: 我写的是,我正在使用Netbeans向每个函数添加类似专业的注释。因此,我从每一个开始,然后按来让Netbeans完成用于以下功能的默认注释方案。 到现在为止,我一直只在PHP语言中使用它,在这种情况下,如果遵循PHP函数确实包含了声明,则Netbeans始终仅在注释方案中添加部分。在所谓的“过程”(不返回任何值的函数)上,缺少此部分。 今天,我为Javascript函数尝试了同样的事

  • 条款23: 必须返回一个对象时不要试图返回一个引用 据说爱因斯坦曾提出过这样的建议:尽可能地让事情简单,但不要过于简单。在c++语言中相似的说法应该是:尽可能地使程序高效,但不要过于高效。 一旦程序员抓住了“传值”在效率上的把柄(参见条款22),他们会变得十分极端,恨不得挖出每一个隐藏在程序中的传值操作。岂不知,在他们不懈地追求纯粹的“传引用”的过程中,他们会不可避免地犯另一个严重的错误:传递一个

  • 我试图弄清楚如何从angular 6/typescript应用程序向firebase数据库编写事务。 下面是我使用的一个工作示例作为指导: 我确定的关键部分如下: 1)创建一个数组来保存事务:const transactions=[]; 2)开始事务:返回db.runtransactions(function(transactions){… 3)使用事务:transaction.set(newPh

  • 编写一个名为season的方法,该方法使用两个整数作为代表月份和日期的参数,并返回一个字符串,指示该月份和日期的季节。假设月份被指定为1到12之间的整数(1代表一月,2代表二月,依此类推),并且月份的日期是1到31之间的数字。 如果日期落在12/16和3/15之间,你应该返回“冬天”。如果日期落在3/16和6/15之间,则应返回“spring”。如果日期介于6/16和9/15之间,则应返回“sum

  • 问题内容: 我的代码中有一个ajax调用。我想通过通话实现的效果很好。我想从数据库中删除一些记录,当通过ajax调用该方法时,该记录实际上被删除了,但是就像在symfony方法中,它必须返回一个响应,这就是为什么当执行该方法时会给我错误 我的Ajax电话是 而执行的方法是 我如何从该方法成功返回?有任何想法吗?谢谢 问题答案: 替换为。也不要忘记在顶部写。