2017-01-13 8 views

ответ

3

Вы можете удалить первые строки заголовка X с помощью ExecuteScript PROCESOR в Nifi.

Ниже приведен пример Jython сценарий, который я написал для себя:

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

class PyStreamCallback(StreamCallback): 
    def __init__(self): 
     pass 
    def process(self, inputStream, outputStream): 
    text = IOUtils.readLines(inputStream, StandardCharsets.UTF_8) 
    for line in text[3:]: 
     outputStream.write(line + "\n") 

flowFile = session.get() 
if (flowFile != None): 
    flowFile = session.write(flowFile,PyStreamCallback()) 
    flowFile = session.putAttribute(flowFile, "filename", flowFile.getAttribute('filename').split('.')[0]+'_translated.json') 
    session.transfer(flowFile, REL_SUCCESS) 

Это, очевидно, удаляет первые 3 строки, но вы можете легко изменить его, чтобы удалить больше или меньше строк.

Надеюсь, что это поможет.

+0

Спасибо! Можно ли это сделать и на Python? Не нужно готовить код, я просто хочу знать, может ли ExecuteScript быть написан на Python. –

+0

Короткий ответ - ** Нет ** Длинный ответ - ** Может быть **: Поскольку движок скрипта внутренне использует Jython, вы можете просто использовать чистые модули python и попытаться заставить его работать с ним при использовании ExecuteScript. Вы можете получить дополнительную информацию [здесь] (https://community.hortonworks.com/questions/53645/cannot-use-numpy-or-scipy-in-python-in-nifi-execut.html) В нем говорится - если другие необходимы модули python, «рассмотрите ExecuteProcess или (если у вас есть входящие файлы потока) ExecuteStreamCommand, который может выполнять командную строку python». Если вам понравился ответ, пожалуйста, подумайте о повышении, спасибо. –

+0

@BiplobBiswas, после удаления n количество строк заголовка. Можем ли мы отправлять каждую строку в отдельные файлы потоков вместо одного файла потока? –

Смежные вопросы