Нифи: Как передать вывод Python из ExecuteScript в тело PutEmail без записи в файл - PullRequest
1 голос
/ 04 марта 2020

Я очень новичок в Nifi, и мне было интересно, могу ли я передать вывод Python (stdout, pandas df, markdown) из ExecuteScript без записи вывода в файл для отправки электронного письма с PutEmail как часть тела в письме. Заранее спасибо.

1 Ответ

1 голос
/ 04 марта 2020

Да, вы можете сделать это, записав файл потока в ваш ExecuteScript. Например:

from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback

# Define a subclass of StreamCallback for use in session.write()
class PyStreamCallback(StreamCallback):
    def __init__(self):
        pass
    def process(self, inputStream, outputStream):
      # Write to flowfile
      out = IOUtils.toString(inputStream, StandardCharsets.UTF_8) + ' Bar'
      outputStream.write(bytearray(out.encode('utf-8')))
# end class

flowFile = session.get()
if(flowFile != None):
    try:
        flowFile = session.write(flowFile, PyStreamCallback())
        # Last operation is transfer to success (failures handled in the catch block)
        session.transfer(flowFile, REL_SUCCESS)
    except Exception as e:
        log.error(repr(e))
        session.transfer(flowFile, REL_FAILURE)
# implicit return at the end

Я проверил это следующим потоком:

enter image description here

Я установил GenerateFlowFile Пользовательский текст на Foo , пусть ExecuteScript добавляет Bar к нему и записывает результат в файл потока. То же самое относится и к вашему варианту использования. Просто позвольте вашему сценарию записать содержимое в файл потока. PutEmail возьмет этот контент и отправит его по электронной почте.

Узнайте, как справиться с ExecuteScript: https://community.cloudera.com/t5/Community-Articles/ExecuteScript-Cookbook-part-1/ta-p/248922

...