Я обрабатываю файл, и я хотел бы удалить (обрезать) первые строки заголовка X, чтобы хранить только данные, возможно, избегая использования регулярных выражений.NiFi: удалить фиксированное количество строк заголовка из файла
Благодаря
Я обрабатываю файл, и я хотел бы удалить (обрезать) первые строки заголовка X, чтобы хранить только данные, возможно, избегая использования регулярных выражений.NiFi: удалить фиксированное количество строк заголовка из файла
Благодаря
Вы можете удалить первые строки заголовка 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 строки, но вы можете легко изменить его, чтобы удалить больше или меньше строк.
Надеюсь, что это поможет.
Спасибо! Можно ли это сделать и на Python? Не нужно готовить код, я просто хочу знать, может ли ExecuteScript быть написан на Python. –
Короткий ответ - ** Нет ** Длинный ответ - ** Может быть **: Поскольку движок скрипта внутренне использует Jython, вы можете просто использовать чистые модули python и попытаться заставить его работать с ним при использовании ExecuteScript. Вы можете получить дополнительную информацию [здесь] (https://community.hortonworks.com/questions/53645/cannot-use-numpy-or-scipy-in-python-in-nifi-execut.html) В нем говорится - если другие необходимы модули python, «рассмотрите ExecuteProcess или (если у вас есть входящие файлы потока) ExecuteStreamCommand, который может выполнять командную строку python». Если вам понравился ответ, пожалуйста, подумайте о повышении, спасибо. –
@BiplobBiswas, после удаления n количество строк заголовка. Можем ли мы отправлять каждую строку в отдельные файлы потоков вместо одного файла потока? –