Я хочу получить только те файлы из каталога HDFS, которые содержат определенное имя (я поместил несколько файлов ответов с таким именем 2017-090-0.1, 2017-090-0.2, 2017-090-0.3 и т. д. теперь я хочу быть уверен, что определенное количество потоковых файлов помещено в hdfs (Я ОЗНАЧАЮ, ЕСЛИ Я ОТПРАВЛЮ 3 ЗАПРОСА С СВЯЗАННЫМ ИМЯ, Я ДОЛЖЕН ПРОВЕРИТЬ, ЕСЛИ Я ПОСТАВИЛ ТРИ ОТВЕТА В HDFS) для этого случая я использую этот код ниже, НО ОН НЕ ПОЛУЧАЕТ ФАЙЛЫ есть несколько тем, которые меня интересуют:
- Возможно ли сделать эту задачу без groovy кода возможностями nifi?
ЧТО Я ДОЛЖЕН ИЗМЕНИТЬ, ЧТОБЫ ЭТОТ КОД РАБОТАЛ?
import org.apache.commons.io.IOUtils import java.nio.charset.StandardCharsets def flowFile= session.get(1);// i gues it will return list of flowfiles def name=""; def count=0; def value=0; def amount=0; List<FlowFile> flowFiles = new ArrayList<FlowFile>(); for(def n in flowFile){ name=n.getAttribute("realName") count=n.getAttribute("count") value=count as Number value=Math.round(value) } session.remove(flowFile) def findFileRecursive( String directoryName, String filePattern) { def fileFound def directory = new File(directoryName) if (directory.isDirectory()){ def findFilenameClosure = { if (filePattern.matcher(it.name).find()){ fileFound = it } } directory.eachFileRecurse(findFilenameClosure) } amount++; flowFiles.add(fileFound); return fileFound } String filePattern=filePattern.contains(name) String directoryName="/group/test/userDate"; findFileRecursive(directoryName,filePattern); if(amount==count){ for(def m in flowFiles){ session.transfer(m,REL_SUCCESS); } }