Google Dataflow で Apache Beam を使用しており、ラムダ関数を介して関数センチメントを呼び出していると、関数名が定義されていないというエラーが表示されます。
output_tweets = (lines
| 'decode' >> beam.Map(lambda x: x.decode('utf-8'))
| 'assign window key' >> beam.WindowInto(window.FixedWindows(10))
| 'batch into n batches' >> BatchElements(min_batch_size=49, max_batch_size=50)
| 'sentiment analysis' >> beam.FlatMap(lambda x: sentiment(x))
)
これは私の Apache Beam 呼び出しであり、最後の行で関数の感情が言及されており、これが問題を引き起こしています。
関数コードは次のとおりです (これは問題ではないと思います)。
def sentiment(messages):
if not isinstance(messages, list):
messages = [messages]
instances = list(map(lambda message: json.loads(message), messages))
lservice = discovery.build('language', 'v1beta1', developerKey = APIKEY)
for instance in instances['text']:
response = lservice.documents().analyzeSentiment(
body ={
'document': {
'type': 'PLAIN_TEXT',
'content': instance
}
}
).execute()
instance['polarity'] = response['documentSentiment']['polarity']
instance['magnitude'] = response['documentSentiment']['magnitude']
return instances
次のトレースバックを取得します
File "stream.py", line 97, in <lambda>
NameError: name 'sentiment' is not defined [while running 'generatedPtransform-441']
何か案が?